add another java client
[spider.git] / spider-web / spiderframe.java
diff --git a/spider-web/spiderframe.java b/spider-web/spiderframe.java
new file mode 100755 (executable)
index 0000000..ae6e12e
--- /dev/null
@@ -0,0 +1,644 @@
+import java.awt.*;
+import java.applet.*;
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+public class spiderframe extends Frame {
+
+
+       public spiderframe(spiderclient parent) {
+               
+               super("Spider DX Cluster");
+               this.parent = parent;
+               this.setFont(OutFont);
+
+               menubar = new MenuBar();
+               file = new Menu("File");
+               file.add(connect_menuitem);
+               file.add(new MenuItem("About"));
+               file.add(new MenuItem("Quit"));
+               if (Call.equals("NOCALL")) connect_menuitem.disable();
+               menubar.add(file);
+               
+               edit = new Menu("Edit");
+               edit.add(copy_menuitem);
+               edit.add(paste_menuitem);
+               copy_menuitem.disable();
+               paste_menuitem.disable();
+menubar.add(edit);
+               
+               
+
+//             settings = new Menu("Preferences");
+//             settings.add(new MenuItem("Personal preferences ..."));
+// menubar.add(settings);
+               
+               
+               
+               commands = new Menu("Commands");
+               commands.add(new MenuItem("Help"));
+               commands.add(new MenuItem("Bye"));
+menubar.add(commands);
+               
+               show = new Menu("Show");
+               show.add(new MenuItem("Show Last DX"));
+               show.add(new MenuItem("Show Beam Direction"));
+                            show.add(new MenuItem("Show wwv"));
+                            show.add(new MenuItem("Search DX"));
+               show.add(new MenuItem("Search Address"));
+                            show.add(new MenuItem("Search QSL Manager"));
+               show.add(new MenuItem("Search QSL Info"));
+               show.add(new MenuItem("Search DXCC"));
+               show.add(new MenuItem("Status"));
+menubar.add(show);
+
+
+               set = new Menu("Settings");
+               set.add(new MenuItem("Set Beep"));
+               set.add(new MenuItem("Set QTH / City"));
+               set.add(new MenuItem("Set Name"));
+               set.add(new MenuItem("Set Locator"));
+               set.add(new MenuItem("Show Personal Settings"));
+menubar.add(set); 
+
+
+               dxann = new Menu("DXannounce");
+               dxann.add(new MenuItem("DXannounce"));
+menubar.add(dxann);    
+
+               mailbox = new Menu("Mailbox");
+               mailbox.add(new MenuItem("Last 50 Msgs"));
+               mailbox.add(new MenuItem("List DX Bulletins"));
+menubar.add(mailbox); 
+
+
+
+
+
+
+
+               this.setMenuBar(menubar);
+
+               setLayout(new BorderLayout());
+               
+               Panel p1 = new Panel();
+               p1.setLayout(new BorderLayout());
+               
+               output = new TextArea();
+               output.setEditable(false);
+
+               p1.add("Center", output);
+               input = new TextArea(2,80);
+               input.setEditable(false);
+               p1.add("South", input);
+               add("Center", p1);
+               
+               
+               Panel p2 = new Panel();
+               p2.setLayout(new FlowLayout());
+               connectButton.enable();
+               p2.add(connectButton);
+                                               
+               disconnectButton.disable();
+               p2.add(disconnectButton);
+               add("South", p2);
+               
+
+               Panel p3 = new Panel();
+               GridBagLayout gbl = new GridBagLayout();
+               p3.setLayout(gbl);
+               
+               GridBagConstraints gbc = new GridBagConstraints();
+               gbc.weightx = 20;
+               gbc.weighty = 100;
+               gbc.fill = GridBagConstraints.HORIZONTAL;
+               gbc.anchor = GridBagConstraints.CENTER;
+               
+               add(p3,DateLabel,gbl, gbc, 0, 0, 1, 1);
+               add(p3,IdleLabel, gbl, gbc, 2, 0, 2, 1);
+               add(p3,connectState,gbl, gbc, 4, 0, 2, 1);
+               
+               add("North",p3);
+                               
+               setColors();
+               setFonts();
+               
+               setDate time = new setDate(this);
+               idle = new idleTime(this);
+               
+       }
+
+
+       private void add(Panel p,Component c, GridBagLayout gbl,
+               GridBagConstraints gbc,
+               int x, int y, int w, int h) {
+               
+               gbc.gridx = x;
+               gbc.gridy = y;
+               gbc.gridwidth = w;
+               gbc.gridheight = h;
+               gbl.setConstraints(c, gbc);
+               p.add(c);
+       }
+
+       public void setColors() {
+               output.setBackground(OutBackgroundColor);
+               output.setForeground(OutForegroundColor);
+               input.setBackground(InBackgroundColor);
+               input.setForeground(InForegroundColor);
+       }
+       
+       public void setFonts() {
+               output.setFont(OutFont);
+               input.setFont(InFont);
+       }
+       
+       public void initPrintStream(PrintStream out) {
+               this.out = out;
+       }
+       
+       public void setText(String s) {
+               int i;
+               
+                for (i=0; i < s.length(); i++) {
+                       if (s.charAt(i) == '\007')
+                               parent.beep();
+                }
+               output.appendText(s +'\n');
+                idle.resetTimer();
+       }
+       
+       public void setCall(String s) {
+               Call = s;
+       }
+
+       public void setPrefix(String s) {
+               Prefix = s;
+               }
+       
+       
+
+       public void setCall2(String s) {
+               Call2 = s;
+               }
+       
+      public void setFreq(String s) {
+               Freq = s;
+               }
+       
+
+      public void setRemarks(String s) {
+               Remarks = s;
+               }
+       
+
+
+       
+       public void setTime(String s) {
+               DateLabel.setText(s);
+       }
+
+       public void setIdle(String s) {
+               IdleLabel.setText(s);
+       }
+       
+       public String getCall() {
+               return Call;
+       }
+       
+       public String setPrefix(){
+              return Prefix;
+              }
+       
+       public String setCall2(){
+              return Call2;
+              }
+       
+       public String setFreq(){
+              return Freq;
+              }
+       
+       public String setRemarks(){
+              return Remarks;
+              }
+       
+       
+       
+       
+       
+       public void setFullname(String s) {
+               Fullname = s;
+               if (Call.equals("NOCALL")) 
+                       connect_menuitem.disable();
+               else
+                       connect_menuitem.enable();
+       }
+       
+       public String getFullname() {
+               return Fullname;
+       }
+       
+       public void setHostname(String s) {
+               Hostname = s;
+       }
+               
+       public String getHostname() {
+               return Hostname;
+       }
+       
+       public void setPort(String s) {
+               Port = s;
+       }
+       
+       public String getPort() {
+               return Port;
+       }
+
+       public void setChannel(String s) {
+               Channel = s;
+       }
+       
+       public String getChannel() {
+               return Channel;
+       }
+       
+//     public void login() {
+//             PersonalPreferences pp = new PersonalPreferences(this, Call, Fullname, OutFont);
+//     }
+       
+       public void antrichtung () {
+               beam pp = new beam (this, Prefix,OutFont);
+       }
+       
+               public void dxannounce () {
+               dxannounce pp = new dxannounce (this, Call2, Freq, Remarks, OutFont);
+       }
+       
+
+       
+       
+       
+               
+       public boolean handleEvent(Event evt) {
+               if (evt.id == Event.KEY_PRESS) {
+                       if (evt.key == '\n') {
+                               
+                               
+                               
+                               idle.resetTimer();
+                               output.appendText(input.getText()+'\n');
+                               out.println(input.getText());
+                                               
+
+                               if (MaxInputPos < 255) {
+                                       InputPos++;                     
+                                       
+                                       MaxInputPos++;
+                               }
+                               else {
+                                       for(int i=0; i < 254; i++) {
+                                               InputBuffer[i] = new String(InputBuffer[i+1]);
+                                       }
+                                       
+                                                         InputPos = 255;
+                               }
+                               InputBuffer[InputPos-1] = new String(input.getText());
+                               input.setText("");
+                               return true;
+                       }
+               } else if (evt.id == Event.KEY_ACTION) {
+                       if (evt.key == Event.UP) {
+                               if (InputPos > 0) {
+                                InputPos--;
+                                       input.setText(InputBuffer[InputPos]);
+                               }
+                               return true;
+                       }
+                       else if (evt.key == Event.DOWN) {
+                               if (InputPos < MaxInputPos) {
+                                       InputPos++;
+                                       input.setText(InputBuffer[InputPos]);
+                               }
+                               else {
+                                       input.setText("");      
+                               }
+                               
+                       } 
+                       return true;
+               }
+               
+               return super.handleEvent(evt);
+       }
+
+       public synchronized void show() {
+               move(50, 50);
+               super.show();
+       }       
+       
+       public void setUserColor(Color c, String whichColor) {
+               if (whichColor.equals("Output Background ...")) {
+                       OutBackgroundColor = c;
+               }
+               else if (whichColor.equals("Output Foreground ...")) {
+                       OutForegroundColor = c;
+               } else  if (whichColor.equals("Input Background ...")) {
+                       InBackgroundColor = c;
+               }
+               else if (whichColor.equals("Input Foreground ...")) {
+                       InForegroundColor = c;
+               } else if (whichColor.equals("Output own text ...")) {
+                       OutOwnColor = c;
+               } 
+
+               setColors();
+       }
+       
+       
+       public void connected() {
+               connect_menuitem.setLabel("Disconnect");
+               connectState.setText("Connected to "+Hostname+":"+Port);
+               input.setEditable(true);
+               copy_menuitem.enable();
+               Connected = true;
+               connectButton.disable();
+               disconnectButton.enable();
+       }
+       
+       public void disconnected() {
+               Connected = false;
+               connect_menuitem.setLabel("Connect");
+               connectState.setText("Disconnected from "+Hostname);
+               input.setEditable(false);
+               copy_menuitem.disable();
+               paste_menuitem.disable();
+               connectButton.enable();
+               disconnectButton.disable();
+       }
+       
+       public void setUserFont(String name, int size, int style, 
+                               String whichFont) {
+               if (whichFont.equals("Area ...")) {
+                       OutFont = new Font(name, style, size);
+               }
+               else if (whichFont.equals("Input Line ...")) {
+                       InFont = new Font(name, style, size);
+               }
+               
+               setFonts();
+       }
+       
+       
+       public void getSelectedText() {
+               CopyPaste = new String(output.getSelectedText());
+               paste_menuitem.enable();
+       }
+       
+       public boolean action(Event evt, Object arg) {
+               if (evt.target instanceof MenuItem) {
+                       if (arg.equals("Quit")) {
+                               this.hide();
+               //      } else if (arg.equals("Personal preferences ...")) {
+               //              PersonalPreferences pp = new PersonalPreferences(this,
+               //                      Call, Fullname, OutFont);
+                       } else if (arg.equals("Connect")) {
+                               parent.doconnect();
+                       } else if (arg.equals("Disconnect")) {
+                               parent.dodisconnect();
+                       } else if (arg.equals("About")) {
+                               InfoDialog id = new InfoDialog(this, "About", 
+                               "JAVA Spider Webclient 0.6b\nPA4AB\n" +
+                               "pa4ab@pa4ab.net \n" +
+                               "April 2001\n" +
+                               "Based on source of the CLX Client from dl6dbh" );
+                               
+                        id.resize(500,300);
+                               id.show();
+                       } else if (arg.equals("Copy")) {
+                               getSelectedText();
+                       } else if (arg.equals("Paste")) {
+                               input.insertText(CopyPaste,input.getSelectionStart());
+                       } else if (arg.equals("Bye")) {
+                               if (Connected) out.println("bye");
+                       } else if (arg.equals("Help")) {
+                               if (Connected) out.println("help overview");
+                       } else if (arg.equals("Show Last DX")) {
+                               if (Connected) out.println("sh/dx");
+                       } else if (arg.equals("Status")) {
+                               if (Connected) out.println("sh/conf");
+                       } else if (arg.equals("Show WWV")) {
+                               if (Connected) out.println("sh/wwv");
+                       } else if (arg.equals("Show Beam Direction")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/heading " + Prefix );
+                       } else if (arg.equals("search DX")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/dx " + Prefix );
+                       
+                       } else if (arg.equals("Search QSL Info")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/qsl " + Prefix );
+                        
+
+                       } else if (arg.equals("search Adress")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/qrz " + Prefix );
+                       
+
+                       } else if (arg.equals("search qsl Manager")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/qsl " + Prefix );
+                       
+
+                       } else if (arg.equals("search DXCC")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("sh/dxcc " + Prefix );
+                       
+                       // buttom settings
+
+                       } else if (arg.equals("Set Beep")) {
+                               if (Connected) out.println("set/Beep");
+                       
+                       }else if (arg.equals("Set QTH / City")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("set/qth " + Prefix );
+                       
+
+                       }else if (arg.equals("Set Name")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("set/name " + Prefix );
+                       
+                       }
+                       else if (arg.equals("Set Locator")) {
+                               beam pp = new beam(this, Prefix, OutFont);
+                               if (Connected) out.println ("set/loc " + Prefix );
+                       
+
+                       }
+                       else if (arg.equals("Show Personal Settings")) {
+                               if (Connected) out.println ("show/sta " + Call );
+                       
+
+                       }
+
+                       // dx announce
+
+                       else if (arg.equals("DXannounce")) {
+                               dxannounce pp = new dxannounce(this, Call2, Freq, Remarks, OutFont);
+                               if (Connected) out.println ("dx " + Call2 + " " + Freq + " " + Remarks );
+       
+                       }
+                       // mailbox 
+                        else if (arg.equals("last 50 Msgs")) {
+                               if (Connected) out.println ("dir/50 " );
+                        }
+                        else if (arg.equals("list DX Bulletins")) {
+                               if (Connected) out.println ("dir/bul " );
+                        }
+                        else if (arg.equals("new Msgs")) {
+                               if (Connected) out.println ("dir/new " );
+                        }
+                        else if (arg.equals("own Msgs")) {
+                               if (Connected) out.println ("dir/own " );
+                        }
+                               
+
+
+                       else return false;
+               }
+               else if (evt.target instanceof Button) {
+                       if (arg.equals("Connect")) {
+                               if (!Connected) {
+                                       parent.doconnect();
+                               } else return false;
+                       } else if (arg.equals("Disconnect")) {
+                               if (Connected) {
+                                       parent.dodisconnect();
+                               } else return false;
+                       }
+               
+                       else return false;
+               }
+               
+               return true;
+       }
+
+       private idleTime idle;
+
+       private TextArea input;
+       private TextArea output;
+       private MenuBar menubar;
+       private Menu file;
+       private Menu edit;
+       private Menu settings;
+       private Menu colors;
+       private Menu fonts;
+       private Menu commands;
+       private Menu show;
+       private Menu set;
+       private Menu dxann;
+       private Menu mailbox;
+
+
+       private MenuItem connect_menuitem = new MenuItem("Connect");
+       private MenuItem copy_menuitem = new MenuItem("Copy");
+       private MenuItem paste_menuitem = new MenuItem("Paste");
+
+       private Button connectButton = new java.awt.Button("Connect");
+       private Button disconnectButton = new java.awt.Button("Disconnect");
+
+       private Date today = new Date();
+       private Label DateLabel = new Label(today.toLocaleString());
+       private Label IdleLabel = new Label("00:00");
+       private Label connectState = new Label("not connected");
+       
+       private Color OutBackgroundColor = new Color(0,0,66);
+       private Color OutForegroundColor = new Color(255,255,0);
+       private Color OutOwnColor = Color.red;
+       private Color InBackgroundColor = new Color(234,199,135);
+       private Color InForegroundColor = Color.red;
+       
+       private Font OutFont = new Font("Courier", Font.PLAIN, 13);
+       private Font InFont = new Font("Courier", Font.BOLD, 13);
+       
+       private String Call = new String("NOCALL");
+       private String Fullname = new String("NOBODY");
+       private String Hostname = new String("localhost");
+       private String Port = new String("3600");
+       private String Channel = new String("0");
+
+
+        private String Prefix = new String ("");        
+        private String Call2 = new String ("");        
+        private String Freq = new String ("");        
+        private String Remarks = new String ("");        
+
+
+
+
+
+
+
+       private PrintStream out = null;
+       
+       private String InputBuffer[] = new String[256];
+       private int InputPos = 0;
+       private int MaxInputPos = 0;
+       
+       private String CopyPaste; 
+       
+       private boolean Connected;
+       
+       private spiderclient parent;
+
+}
+
+class setDate extends Thread {
+
+       spiderframe cf;
+       
+       public setDate(spiderframe cf) {
+               this.cf = cf;
+               this.start();
+       }
+
+       public void run() {
+               for(;;) {
+                       try { sleep(1000); } catch (InterruptedException e) {}
+                       today = new Date();
+                       cf.setTime(today.toLocaleString());
+               }
+       }
+       
+       private Date today = new Date();
+       
+}
+
+
+class idleTime extends Thread {
+
+       spiderframe cf;
+       int count;
+       
+       public idleTime(spiderframe cf) {
+               this.cf = cf;
+               this.start();
+               count = 0;
+       }
+
+       public void resetTimer() {
+               count=0;
+       }
+
+       public void run() {
+               
+               for(;;) {
+                       try { sleep(1000); } catch (InterruptedException e) {}
+                       count++;
+                       String sec = new Format("%02d").form(count % 60);
+                       String min = new Format("%02d").form(count / 60);
+                       cf.setIdle("Idle: "+min+":"+sec);
+               }
+       }
+}