ae6e12e8e10bf720dad8d50aaae8c10e9d3949c7
[spider.git] / spider-web / spiderframe.java
1 import java.awt.*;
2 import java.applet.*;
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6
7 public class spiderframe extends Frame {
8
9
10         public spiderframe(spiderclient parent) {
11                 
12                 super("Spider DX Cluster");
13                 this.parent = parent;
14                 this.setFont(OutFont);
15
16                 menubar = new MenuBar();
17                 file = new Menu("File");
18                 file.add(connect_menuitem);
19                 file.add(new MenuItem("About"));
20                 file.add(new MenuItem("Quit"));
21                 if (Call.equals("NOCALL")) connect_menuitem.disable();
22                 menubar.add(file);
23                 
24                 edit = new Menu("Edit");
25                 edit.add(copy_menuitem);
26                 edit.add(paste_menuitem);
27                 copy_menuitem.disable();
28                 paste_menuitem.disable();
29 menubar.add(edit);
30                 
31                 
32
33 //              settings = new Menu("Preferences");
34 //              settings.add(new MenuItem("Personal preferences ..."));
35 // menubar.add(settings);
36                 
37                 
38                 
39                 commands = new Menu("Commands");
40                 commands.add(new MenuItem("Help"));
41                 commands.add(new MenuItem("Bye"));
42 menubar.add(commands);
43                 
44                 show = new Menu("Show");
45                 show.add(new MenuItem("Show Last DX"));
46                 show.add(new MenuItem("Show Beam Direction"));
47                             show.add(new MenuItem("Show wwv"));
48                             show.add(new MenuItem("Search DX"));
49                 show.add(new MenuItem("Search Address"));
50                             show.add(new MenuItem("Search QSL Manager"));
51                 show.add(new MenuItem("Search QSL Info"));
52                 show.add(new MenuItem("Search DXCC"));
53                 show.add(new MenuItem("Status"));
54 menubar.add(show);
55
56
57                 set = new Menu("Settings");
58                 set.add(new MenuItem("Set Beep"));
59                 set.add(new MenuItem("Set QTH / City"));
60                 set.add(new MenuItem("Set Name"));
61                 set.add(new MenuItem("Set Locator"));
62                 set.add(new MenuItem("Show Personal Settings"));
63 menubar.add(set); 
64
65
66                 dxann = new Menu("DXannounce");
67                 dxann.add(new MenuItem("DXannounce"));
68 menubar.add(dxann);     
69
70                 mailbox = new Menu("Mailbox");
71                 mailbox.add(new MenuItem("Last 50 Msgs"));
72                 mailbox.add(new MenuItem("List DX Bulletins"));
73 menubar.add(mailbox); 
74
75
76
77
78
79
80
81                 this.setMenuBar(menubar);
82
83                 setLayout(new BorderLayout());
84                 
85                 Panel p1 = new Panel();
86                 p1.setLayout(new BorderLayout());
87                 
88                 output = new TextArea();
89                 output.setEditable(false);
90
91                 p1.add("Center", output);
92                 input = new TextArea(2,80);
93                 input.setEditable(false);
94                 p1.add("South", input);
95                 add("Center", p1);
96                 
97                 
98                 Panel p2 = new Panel();
99                 p2.setLayout(new FlowLayout());
100                 connectButton.enable();
101                 p2.add(connectButton);
102                                                 
103                 disconnectButton.disable();
104                 p2.add(disconnectButton);
105                 add("South", p2);
106                 
107
108                 Panel p3 = new Panel();
109                 GridBagLayout gbl = new GridBagLayout();
110                 p3.setLayout(gbl);
111                 
112                 GridBagConstraints gbc = new GridBagConstraints();
113                 gbc.weightx = 20;
114                 gbc.weighty = 100;
115                 gbc.fill = GridBagConstraints.HORIZONTAL;
116                 gbc.anchor = GridBagConstraints.CENTER;
117                 
118                 add(p3,DateLabel,gbl, gbc, 0, 0, 1, 1);
119                 add(p3,IdleLabel, gbl, gbc, 2, 0, 2, 1);
120                 add(p3,connectState,gbl, gbc, 4, 0, 2, 1);
121                 
122                 add("North",p3);
123                                 
124                 setColors();
125                 setFonts();
126                 
127                 setDate time = new setDate(this);
128                 idle = new idleTime(this);
129                 
130         }
131
132
133         private void add(Panel p,Component c, GridBagLayout gbl,
134                 GridBagConstraints gbc,
135                 int x, int y, int w, int h) {
136                 
137                 gbc.gridx = x;
138                 gbc.gridy = y;
139                 gbc.gridwidth = w;
140                 gbc.gridheight = h;
141                 gbl.setConstraints(c, gbc);
142                 p.add(c);
143         }
144
145         public void setColors() {
146                 output.setBackground(OutBackgroundColor);
147                 output.setForeground(OutForegroundColor);
148                 input.setBackground(InBackgroundColor);
149                 input.setForeground(InForegroundColor);
150         }
151         
152         public void setFonts() {
153                 output.setFont(OutFont);
154                 input.setFont(InFont);
155         }
156         
157         public void initPrintStream(PrintStream out) {
158                 this.out = out;
159         }
160         
161         public void setText(String s) {
162                 int i;
163                 
164                  for (i=0; i < s.length(); i++) {
165                         if (s.charAt(i) == '\007')
166                                 parent.beep();
167                  }
168                 output.appendText(s +'\n');
169                  idle.resetTimer();
170         }
171         
172         public void setCall(String s) {
173                 Call = s;
174         }
175
176         public void setPrefix(String s) {
177                 Prefix = s;
178                 }
179         
180         
181
182         public void setCall2(String s) {
183                 Call2 = s;
184                 }
185         
186       public void setFreq(String s) {
187                 Freq = s;
188                 }
189         
190
191       public void setRemarks(String s) {
192                 Remarks = s;
193                 }
194         
195
196
197         
198         public void setTime(String s) {
199                 DateLabel.setText(s);
200         }
201
202         public void setIdle(String s) {
203                 IdleLabel.setText(s);
204         }
205         
206         public String getCall() {
207                 return Call;
208         }
209         
210         public String setPrefix(){
211                return Prefix;
212                }
213         
214         public String setCall2(){
215                return Call2;
216                }
217         
218         public String setFreq(){
219                return Freq;
220                }
221         
222         public String setRemarks(){
223                return Remarks;
224                }
225         
226         
227         
228         
229         
230         public void setFullname(String s) {
231                 Fullname = s;
232                 if (Call.equals("NOCALL")) 
233                         connect_menuitem.disable();
234                 else
235                         connect_menuitem.enable();
236         }
237         
238         public String getFullname() {
239                 return Fullname;
240         }
241         
242         public void setHostname(String s) {
243                 Hostname = s;
244         }
245                 
246         public String getHostname() {
247                 return Hostname;
248         }
249         
250         public void setPort(String s) {
251                 Port = s;
252         }
253         
254         public String getPort() {
255                 return Port;
256         }
257
258         public void setChannel(String s) {
259                 Channel = s;
260         }
261         
262         public String getChannel() {
263                 return Channel;
264         }
265         
266 //      public void login() {
267 //              PersonalPreferences pp = new PersonalPreferences(this, Call, Fullname, OutFont);
268 //      }
269         
270         public void antrichtung () {
271                 beam pp = new beam (this, Prefix,OutFont);
272         }
273         
274                 public void dxannounce () {
275                 dxannounce pp = new dxannounce (this, Call2, Freq, Remarks, OutFont);
276         }
277         
278
279         
280         
281         
282                 
283         public boolean handleEvent(Event evt) {
284                 if (evt.id == Event.KEY_PRESS) {
285                         if (evt.key == '\n') {
286                                 
287                                 
288                                 
289                                 idle.resetTimer();
290                                 output.appendText(input.getText()+'\n');
291                                 out.println(input.getText());
292                                                 
293
294                                 if (MaxInputPos < 255) {
295                                         InputPos++;                     
296                                         
297                                         MaxInputPos++;
298                                 }
299                                 else {
300                                         for(int i=0; i < 254; i++) {
301                                                 InputBuffer[i] = new String(InputBuffer[i+1]);
302                                         }
303                                         
304                                                          InputPos = 255;
305                                 }
306                                 InputBuffer[InputPos-1] = new String(input.getText());
307                                 input.setText("");
308                                 return true;
309                         }
310                 } else if (evt.id == Event.KEY_ACTION) {
311                         if (evt.key == Event.UP) {
312                                 if (InputPos > 0) {
313                                  InputPos--;
314                                         input.setText(InputBuffer[InputPos]);
315                                 }
316                                 return true;
317                         }
318                         else if (evt.key == Event.DOWN) {
319                                 if (InputPos < MaxInputPos) {
320                                         InputPos++;
321                                         input.setText(InputBuffer[InputPos]);
322                                 }
323                                 else {
324                                         input.setText("");      
325                                 }
326                                 
327                         } 
328                         return true;
329                 }
330                 
331                 return super.handleEvent(evt);
332         }
333
334         public synchronized void show() {
335                 move(50, 50);
336                 super.show();
337         }       
338         
339         public void setUserColor(Color c, String whichColor) {
340                 if (whichColor.equals("Output Background ...")) {
341                         OutBackgroundColor = c;
342                 }
343                 else if (whichColor.equals("Output Foreground ...")) {
344                         OutForegroundColor = c;
345                 } else  if (whichColor.equals("Input Background ...")) {
346                         InBackgroundColor = c;
347                 }
348                 else if (whichColor.equals("Input Foreground ...")) {
349                         InForegroundColor = c;
350                 } else if (whichColor.equals("Output own text ...")) {
351                         OutOwnColor = c;
352                 } 
353
354                 setColors();
355         }
356         
357         
358         public void connected() {
359                 connect_menuitem.setLabel("Disconnect");
360                 connectState.setText("Connected to "+Hostname+":"+Port);
361                 input.setEditable(true);
362                 copy_menuitem.enable();
363                 Connected = true;
364                 connectButton.disable();
365                 disconnectButton.enable();
366         }
367         
368         public void disconnected() {
369                 Connected = false;
370                 connect_menuitem.setLabel("Connect");
371                 connectState.setText("Disconnected from "+Hostname);
372                 input.setEditable(false);
373                 copy_menuitem.disable();
374                 paste_menuitem.disable();
375                 connectButton.enable();
376                 disconnectButton.disable();
377         }
378         
379         public void setUserFont(String name, int size, int style, 
380                                 String whichFont) {
381                 if (whichFont.equals("Area ...")) {
382                         OutFont = new Font(name, style, size);
383                 }
384                 else if (whichFont.equals("Input Line ...")) {
385                         InFont = new Font(name, style, size);
386                 }
387                 
388                 setFonts();
389         }
390         
391         
392         public void getSelectedText() {
393                 CopyPaste = new String(output.getSelectedText());
394                 paste_menuitem.enable();
395         }
396         
397         public boolean action(Event evt, Object arg) {
398                 if (evt.target instanceof MenuItem) {
399                         if (arg.equals("Quit")) {
400                                 this.hide();
401                 //      } else if (arg.equals("Personal preferences ...")) {
402                 //              PersonalPreferences pp = new PersonalPreferences(this,
403                 //                      Call, Fullname, OutFont);
404                         } else if (arg.equals("Connect")) {
405                                 parent.doconnect();
406                         } else if (arg.equals("Disconnect")) {
407                                 parent.dodisconnect();
408                         } else if (arg.equals("About")) {
409                                 InfoDialog id = new InfoDialog(this, "About", 
410                                 "JAVA Spider Webclient 0.6b\nPA4AB\n" +
411                                 "pa4ab@pa4ab.net \n" +
412                                 "April 2001\n" +
413                                 "Based on source of the CLX Client from dl6dbh" );
414                                 
415                          id.resize(500,300);
416                                 id.show();
417                         } else if (arg.equals("Copy")) {
418                                 getSelectedText();
419                         } else if (arg.equals("Paste")) {
420                                 input.insertText(CopyPaste,input.getSelectionStart());
421                         } else if (arg.equals("Bye")) {
422                                 if (Connected) out.println("bye");
423                         } else if (arg.equals("Help")) {
424                                 if (Connected) out.println("help overview");
425                         } else if (arg.equals("Show Last DX")) {
426                                 if (Connected) out.println("sh/dx");
427                         } else if (arg.equals("Status")) {
428                                 if (Connected) out.println("sh/conf");
429                         } else if (arg.equals("Show WWV")) {
430                                 if (Connected) out.println("sh/wwv");
431                         } else if (arg.equals("Show Beam Direction")) {
432                                 beam pp = new beam(this, Prefix, OutFont);
433                                 if (Connected) out.println ("sh/heading " + Prefix );
434                         } else if (arg.equals("search DX")) {
435                                 beam pp = new beam(this, Prefix, OutFont);
436                                 if (Connected) out.println ("sh/dx " + Prefix );
437                         
438                         } else if (arg.equals("Search QSL Info")) {
439                                 beam pp = new beam(this, Prefix, OutFont);
440                                 if (Connected) out.println ("sh/qsl " + Prefix );
441                          
442
443                         } else if (arg.equals("search Adress")) {
444                                 beam pp = new beam(this, Prefix, OutFont);
445                                 if (Connected) out.println ("sh/qrz " + Prefix );
446                         
447
448                         } else if (arg.equals("search qsl Manager")) {
449                                 beam pp = new beam(this, Prefix, OutFont);
450                                 if (Connected) out.println ("sh/qsl " + Prefix );
451                         
452
453                         } else if (arg.equals("search DXCC")) {
454                                 beam pp = new beam(this, Prefix, OutFont);
455                                 if (Connected) out.println ("sh/dxcc " + Prefix );
456                         
457                         // buttom settings
458
459                         } else if (arg.equals("Set Beep")) {
460                                 if (Connected) out.println("set/Beep");
461                         
462                         }else if (arg.equals("Set QTH / City")) {
463                                 beam pp = new beam(this, Prefix, OutFont);
464                                 if (Connected) out.println ("set/qth " + Prefix );
465                         
466
467                         }else if (arg.equals("Set Name")) {
468                                 beam pp = new beam(this, Prefix, OutFont);
469                                 if (Connected) out.println ("set/name " + Prefix );
470                         
471                         }
472                         else if (arg.equals("Set Locator")) {
473                                 beam pp = new beam(this, Prefix, OutFont);
474                                 if (Connected) out.println ("set/loc " + Prefix );
475                         
476
477                         }
478                         else if (arg.equals("Show Personal Settings")) {
479                                 if (Connected) out.println ("show/sta " + Call );
480                         
481
482                         }
483
484                         // dx announce
485
486                         else if (arg.equals("DXannounce")) {
487                                 dxannounce pp = new dxannounce(this, Call2, Freq, Remarks, OutFont);
488                                 if (Connected) out.println ("dx " + Call2 + " " + Freq + " " + Remarks );
489         
490                         }
491                         // mailbox 
492                          else if (arg.equals("last 50 Msgs")) {
493                                 if (Connected) out.println ("dir/50 " );
494                          }
495                          else if (arg.equals("list DX Bulletins")) {
496                                 if (Connected) out.println ("dir/bul " );
497                          }
498                          else if (arg.equals("new Msgs")) {
499                                 if (Connected) out.println ("dir/new " );
500                          }
501                          else if (arg.equals("own Msgs")) {
502                                 if (Connected) out.println ("dir/own " );
503                          }
504                                 
505
506
507                         else return false;
508                 }
509                 else if (evt.target instanceof Button) {
510                         if (arg.equals("Connect")) {
511                                 if (!Connected) {
512                                         parent.doconnect();
513                                 } else return false;
514                         } else if (arg.equals("Disconnect")) {
515                                 if (Connected) {
516                                         parent.dodisconnect();
517                                 } else return false;
518                         }
519                 
520                         else return false;
521                 }
522                 
523                 return true;
524         }
525
526         private idleTime idle;
527
528         private TextArea input;
529         private TextArea output;
530         private MenuBar menubar;
531         private Menu file;
532         private Menu edit;
533         private Menu settings;
534         private Menu colors;
535         private Menu fonts;
536         private Menu commands;
537         private Menu show;
538         private Menu set;
539         private Menu dxann;
540         private Menu mailbox;
541
542
543         private MenuItem connect_menuitem = new MenuItem("Connect");
544         private MenuItem copy_menuitem = new MenuItem("Copy");
545         private MenuItem paste_menuitem = new MenuItem("Paste");
546
547         private Button connectButton = new java.awt.Button("Connect");
548         private Button disconnectButton = new java.awt.Button("Disconnect");
549
550         private Date today = new Date();
551         private Label DateLabel = new Label(today.toLocaleString());
552         private Label IdleLabel = new Label("00:00");
553         private Label connectState = new Label("not connected");
554         
555  
556         private Color OutBackgroundColor = new Color(0,0,66);
557         private Color OutForegroundColor = new Color(255,255,0);
558         private Color OutOwnColor = Color.red;
559         private Color InBackgroundColor = new Color(234,199,135);
560         private Color InForegroundColor = Color.red;
561         
562         private Font OutFont = new Font("Courier", Font.PLAIN, 13);
563         private Font InFont = new Font("Courier", Font.BOLD, 13);
564         
565         private String Call = new String("NOCALL");
566         private String Fullname = new String("NOBODY");
567         private String Hostname = new String("localhost");
568         private String Port = new String("3600");
569         private String Channel = new String("0");
570
571
572         private String Prefix = new String ("");        
573         private String Call2 = new String ("");        
574         private String Freq = new String ("");        
575         private String Remarks = new String ("");        
576
577
578
579
580
581
582
583         private PrintStream out = null;
584         
585         private String InputBuffer[] = new String[256];
586         private int InputPos = 0;
587         private int MaxInputPos = 0;
588         
589         private String CopyPaste; 
590         
591         private boolean Connected;
592         
593         private spiderclient parent;
594
595 }
596
597 class setDate extends Thread {
598
599         spiderframe cf;
600         
601         public setDate(spiderframe cf) {
602                 this.cf = cf;
603                 this.start();
604         }
605
606         public void run() {
607                 for(;;) {
608                         try { sleep(1000); } catch (InterruptedException e) {}
609                         today = new Date();
610                         cf.setTime(today.toLocaleString());
611                 }
612         }
613         
614         private Date today = new Date();
615         
616 }
617
618
619 class idleTime extends Thread {
620
621         spiderframe cf;
622         int count;
623         
624         public idleTime(spiderframe cf) {
625                 this.cf = cf;
626                 this.start();
627                 count = 0;
628         }
629
630         public void resetTimer() {
631                 count=0;
632         }
633
634         public void run() {
635                 
636                 for(;;) {
637                         try { sleep(1000); } catch (InterruptedException e) {}
638                         count++;
639                         String sec = new Format("%02d").form(count % 60);
640                         String min = new Format("%02d").form(count / 60);
641                         cf.setIdle("Idle: "+min+":"+sec);
642                 }
643         }
644 }