Author: bdonlan
Date: 2005-01-06 20:50:13 -0500 (Thu, 06 Jan 2005)
New Revision: 529

Added:
   trunk/misc/javer/src/javer/ChannelTab.form
   trunk/misc/javer/src/javer/ChannelTab.java
   trunk/misc/javer/src/javer/QueryTab.java
   trunk/misc/javer/src/javer/SimpleTextTab.form
   trunk/misc/javer/src/javer/SimpleTextTab.java
   trunk/misc/javer/src/javer/TextTab.java
Modified:
   /
   trunk/misc/javer/nbproject/build-impl.xml
   trunk/misc/javer/nbproject/genfiles.properties
   trunk/misc/javer/src/javer/HaverClient.java
   trunk/misc/javer/src/javer/JaverUI.java
   trunk/misc/javer/src/javer/JaverUIPanel.form
   trunk/misc/javer/src/javer/JaverUIPanel.java
Log:
 [EMAIL PROTECTED]:  bdonlan | 2005-01-07T01:49:45.773847Z
 Javer now has a simple tabbed interface. Far from feature-complete.



Property changes on: 
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11199
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local:11201

Modified: trunk/misc/javer/nbproject/build-impl.xml
===================================================================
--- trunk/misc/javer/nbproject/build-impl.xml   2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/nbproject/build-impl.xml   2005-01-07 01:50:13 UTC (rev 
529)
@@ -94,7 +94,7 @@
             <attribute name="name"/>
             <attribute name="value"/>
             <sequential>
-                <property name="@{name}" value="[EMAIL PROTECTED]"/>
+                <property value="[EMAIL PROTECTED]" name="@{name}"/>
             </sequential>
         </macrodef>
     </target>
@@ -303,7 +303,7 @@
     =================
     -->
     <target name="-debug-start-debugger" if="netbeans.home" depends="init">
-        <j2seproject:nbjpdastart 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"/>
+        <j2seproject:nbjpdastart 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"; 
name="${debug.class}"/>
     </target>
     <target name="-debug-start-debuggee" depends="init,compile">
         <j2seproject:debug 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"/>
@@ -443,7 +443,7 @@
         <fail unless="applet.url">Must select one file in the IDE or set 
applet.url</fail>
         <j2seproject:java 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"; 
classname="sun.applet.AppletViewer">
             <customize>
-                <arg line="${applet.url}"/>
+                <arg value="${applet.url}"/>
             </customize>
         </j2seproject:java>
     </target>
@@ -454,7 +454,7 @@
     -->
     <target name="-debug-start-debuggee-applet" if="netbeans.home" 
depends="init,compile-single">
         <fail unless="applet.url">Must select one file in the IDE or set 
applet.url</fail>
-        <j2seproject:debug 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"; 
args="${applet.url}" classname="sun.applet.AppletViewer"/>
+        <j2seproject:debug 
xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"; 
args="&quot;${applet.url}&quot;" classname="sun.applet.AppletViewer"/>
     </target>
     <target name="debug-applet" if="netbeans.home" 
depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet"/>
     <!--

Modified: trunk/misc/javer/nbproject/genfiles.properties
===================================================================
--- trunk/misc/javer/nbproject/genfiles.properties      2005-01-06 23:53:34 UTC 
(rev 528)
+++ trunk/misc/javer/nbproject/genfiles.properties      2005-01-07 01:50:13 UTC 
(rev 529)
@@ -2,5 +2,5 @@
 build.xml.script.CRC32=e8133476
 build.xml.stylesheet.CRC32=ba5d3624
 nbproject/build-impl.xml.data.CRC32=6ef497b2
-nbproject/build-impl.xml.script.CRC32=4b3443b9
-nbproject/build-impl.xml.stylesheet.CRC32=fac80600
+nbproject/build-impl.xml.script.CRC32=e20b63b8
+nbproject/build-impl.xml.stylesheet.CRC32=1cf0b40c

Added: trunk/misc/javer/src/javer/ChannelTab.form
===================================================================
--- trunk/misc/javer/src/javer/ChannelTab.form  2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/ChannelTab.form  2005-01-07 01:50:13 UTC (rev 
529)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.0" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+
+  <Layout 
class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Container class="javax.swing.JSplitPane" name="jSplitPane1">
+      <Constraints>
+        <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" 
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
+      <SubComponents>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+          <Constraints>
+            <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
 
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
+              <JSplitPaneConstraints position="left"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+          <SubComponents>
+            <Component class="javax.swing.JTextArea" name="chatArea">
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" 
type="java.lang.Integer" value="0"/>
+              </AuxValues>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+          <Constraints>
+            <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
 
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
+              <JSplitPaneConstraints position="right"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+          <SubComponents>
+            <Component class="javax.swing.JList" name="userList">
+              <AuxValues>
+                <AuxValue name="JavaCodeGenerator_VariableModifier" 
type="java.lang.Integer" value="0"/>
+              </AuxValues>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>

Added: trunk/misc/javer/src/javer/ChannelTab.java
===================================================================
--- trunk/misc/javer/src/javer/ChannelTab.java  2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/ChannelTab.java  2005-01-07 01:50:13 UTC (rev 
529)
@@ -0,0 +1,101 @@
+/*
+ * ChannelTab.java
+ *
+ * Created on January 5, 2005, 11:50 PM
+ */
+
+package javer;
+import java.io.*;
+import java.util.*;
+/**
+ *
+ * @author  bdonlan
+ */
+public class ChannelTab extends javax.swing.JPanel implements QueryTab {
+    
+    HaverClient cli;
+    String channel;
+    Set users;
+    
+    /** Creates new form ChannelTab */
+    public ChannelTab(HaverClient cli, String channel) {
+        this.cli = cli;
+        this.channel = channel;
+        users = new java.util.TreeSet();
+        initComponents();
+    }
+    
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    private void initComponents() {//GEN-BEGIN:initComponents
+        jSplitPane1 = new javax.swing.JSplitPane();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        chatArea = new javax.swing.JTextArea();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        userList = new javax.swing.JList();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jScrollPane1.setViewportView(chatArea);
+
+        jSplitPane1.setLeftComponent(jScrollPane1);
+
+        jScrollPane2.setViewportView(userList);
+
+        jSplitPane1.setRightComponent(jScrollPane2);
+
+        add(jSplitPane1, java.awt.BorderLayout.CENTER);
+
+    }//GEN-END:initComponents
+    
+    public void sendText(String s) throws java.io.IOException {
+        cli.sendNormalMessage(channel, s);
+    }
+    
+    public void sendAction(String s) throws java.io.IOException {
+        cli.sendAction(channel, s);
+    }
+
+    public void putText(String s) {
+        boolean atEnd =
+            (chatArea.getCaretPosition() == chatArea.getText().length() - 1);
+        chatArea.append(s + "\n");
+        if (atEnd)
+            chatArea.setCaretPosition(chatArea.getText().length() - 1);
+    }
+    
+    public void updateUsers() {
+        userList.setListData(users.toArray());
+    }
+    
+    public void setUsers(Set m) {
+        try {
+            users = (SortedSet) m;
+        } catch (ClassCastException e) {
+            users = new TreeSet(m);
+        }
+        updateUsers();
+    }
+    
+    public void addUser(String who) {
+        users.add(who);
+        updateUsers();
+    }
+    
+    public void delUser(String who) {
+        users.remove(who);
+        updateUsers();
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    javax.swing.JTextArea chatArea;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JSplitPane jSplitPane1;
+    javax.swing.JList userList;
+    // End of variables declaration//GEN-END:variables
+    
+}


Property changes on: trunk/misc/javer/src/javer/ChannelTab.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/misc/javer/src/javer/HaverClient.java
===================================================================
--- trunk/misc/javer/src/javer/HaverClient.java 2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/HaverClient.java 2005-01-07 01:50:13 UTC (rev 
529)
@@ -20,7 +20,6 @@
     private java.io.BufferedReader reader = null;
     private java.util.Map wants = null;
     private java.util.Map serverevents = null;
-    private java.util.Map notifies = null;
     private String uid = null;
     private Integer lock = new Integer(0);
     
@@ -39,7 +38,6 @@
     public HaverClient() {
         initWants();
         initServerEvents();
-        notifies = new HashMap();
     }
 
     public void connect(String uid, java.net.Socket socket) throws 
java.io.IOException {
@@ -265,4 +263,14 @@
     public void listChannel(String channel) throws IOException {
         send("LIST\t" + channel + "\tuser");
     }
+
+    public void disconnect() {
+        try {
+            sock.close();
+        } catch(Exception e) {}
+        sock = null;
+        reader = null;
+        writer = null;
+        uid = null;
+    }
 }

Modified: trunk/misc/javer/src/javer/JaverUI.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUI.java     2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/JaverUI.java     2005-01-07 01:50:13 UTC (rev 
529)
@@ -14,7 +14,7 @@
     
     /** Creates new form JaverUI */
     public JaverUI() {
-        add(new JaverUIPanel());
+        add(new JaverUIPanel("odin.haverdev.org", 7070));
         pack();
     }
     

Modified: trunk/misc/javer/src/javer/JaverUIPanel.form
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.form        2005-01-06 23:53:34 UTC 
(rev 528)
+++ trunk/misc/javer/src/javer/JaverUIPanel.form        2005-01-07 01:50:13 UTC 
(rev 529)
@@ -4,55 +4,43 @@
 
   <Layout 
class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
   <SubComponents>
-    <Component class="javax.swing.JTextField" name="input">
-      <Properties>
-        <Property name="text" type="java.lang.String" value="jTextField1"/>
-      </Properties>
-      <Events>
-        <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="inputActionPerformed"/>
-        <EventHandler event="keyTyped" listener="java.awt.event.KeyListener" 
parameters="java.awt.event.KeyEvent" handler="inputKeyTyped"/>
-      </Events>
+    <Container class="javax.swing.JTabbedPane" name="jTabbedPane1">
       <Constraints>
         <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" 
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
-          <BorderConstraints direction="South"/>
+          <BorderConstraints direction="Center"/>
         </Constraint>
       </Constraints>
-    </Component>
-    <Container class="javax.swing.JSplitPane" name="jSplitPane1">
+
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
+    </Container>
+    <Container class="javax.swing.JPanel" name="jPanel2">
       <Constraints>
         <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" 
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
-          <BorderConstraints direction="Center"/>
+          <BorderConstraints direction="South"/>
         </Constraint>
       </Constraints>
 
-      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout">
+        <Property name="axis" type="int" value="1"/>
+      </Layout>
       <SubComponents>
-        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
-          <Constraints>
-            <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
 
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
-              <JSplitPaneConstraints position="left"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
-          <SubComponents>
-            <Component class="javax.swing.JTextArea" name="chatWindow">
-            </Component>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JScrollPane" name="jScrollPane2">
-          <Constraints>
-            <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"
 
value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
-              <JSplitPaneConstraints position="right"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
-          <SubComponents>
-            <Component class="javax.swing.JList" name="userList">
-            </Component>
-          </SubComponents>
-        </Container>
+        <Component class="javax.swing.JTextField" name="input">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="jTextField1"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" 
listener="java.awt.event.ActionListener" 
parameters="java.awt.event.ActionEvent" handler="inputActionPerformed"/>
+            <EventHandler event="keyTyped" 
listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" 
handler="inputKeyTyped"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JLabel" name="status">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="NOT 
CONNECTED"/>
+            <Property name="minimumSize" type="java.awt.Dimension" 
editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[300, 300]"/>
+            </Property>
+          </Properties>
+        </Component>
       </SubComponents>
     </Container>
   </SubComponents>

Modified: trunk/misc/javer/src/javer/JaverUIPanel.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-06 23:53:34 UTC 
(rev 528)
+++ trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-07 01:50:13 UTC 
(rev 529)
@@ -14,125 +14,153 @@
  */
 public class JaverUIPanel extends java.awt.Panel {
     
-    Client cli;
-    Set names = new HashSet();
+    Client cli = null;
+    String host = null;
+    String uid = null;
+    int port = 7070;
+    Map commands = new HashMap();
+    Map tabs = new HashMap();
+    TabPair serverTabPair = new TabPair();
+    SimpleTextTab serverTab = new SimpleTextTab();
     
     /** Creates new form JaverUIPanel */
-    public JaverUIPanel() {
+    public JaverUIPanel(String hostname, int port) {
+        this.host = hostname;
+        this.port = port;
+        initCommands();
         initComponents();
-        jSplitPane1.setDividerLocation(.8);
-        cli = new Client();
-        try {
-            cli.connect("bd_javer", "odin.haverdev.org", 7070);
-        } catch (IOException e) {
-            putLine(e.getStackTrace().toString());
+        serverTabPair.tab = serverTab;
+        serverTabPair.title = "Server";
+        addTab(serverTabPair);
+        disconnect();
+    }
+
+    protected abstract class CommandHandler {
+        public CommandHandler () {}
+        abstract boolean trigger(String arg) throws IOException;
+    }
+    
+    public final class TabPair {
+        java.awt.Component tab;
+        int index;
+        String title;
+    }
+    
+    protected void addTab(TabPair p) {
+        p.index = jTabbedPane1.getTabCount();
+        jTabbedPane1.addTab(p.title, p.tab);
+        tabs.put(p.title, p);
+    }
+    
+    protected TabPair findTab(String tag) {
+        TabPair t = (TabPair) tabs.get(tag);
+        return t;
+    }
+    
+    protected void killTab(TabPair p) {
+        Iterator it;
+        if (p == null || !tabs.containsValue(p))
+            return;
+        tabs.remove(p.title);
+        it = tabs.values().iterator();
+        while (it.hasNext()) {
+            TabPair x = (TabPair) it.next();
+            if (x.index > p.index) {
+                x.index--;
+            }
         }
     }
-
-    public final class Client extends HaverClient {
+    
+    public class Client extends HaverClient {
         public void eventDebugMessage(String s) {
-            putLine(s);
+            System.out.println(s);
             super.eventDebugMessage(s);
         }
 
         public void eventIdentAccepted() {
-            putLine("--- Logged in.");
-            try {
-                cli.join("lobby");
-            } catch (IOException e) {
-                putLine(e.getStackTrace().toString());
-            }
+            putServer("Logged in successfully.");
+            status.setText("Connected.");
             super.eventIdentAccepted();
         }
 
+        public void eventIdenting() {
+            putServer("Connected, logging in...");
+            super.eventIdenting();
+        }
+
+        public void eventChannelPart(String where) {
+            killTab(findTab("Channel: " + where));
+            super.eventChannelPart(where);
+        }
+
         public void eventChannelJoin(String where) {
-            putLine("--- You have now joined: " + where);
+            TabPair t = findTab(where);
+            if (t == null) {
+                t = new TabPair();
+                t.tab = new ChannelTab(cli, where);
+                t.title = "Channel: " + where;
+                addTab(t);
+            }
+            QueryTab qt = (QueryTab) t.tab;
+            qt.putText("--- Joined " + where);
             try {
-                listChannel(where);
-            } catch (IOException e) {
-                /* XXX */
-            }
+                cli.listChannel(where);
+            } catch (IOException e) { /* XXX */ }
             super.eventChannelJoin(where);
         }
 
         public void eventMessage(String where, String who, String type, 
String[] args) {
+
             super.eventMessage(where, who, type, args);
         }
 
-        public void eventNormalMessage(String where, String who, String arg) {
-            putLine(where + ": <" + who + "> " + arg);
-            super.eventNormalMessage(where, who, arg);
-        }
+        public void eventChannelList(String where, Set names) {
 
-        public void eventAction(String where, String who, String arg) {
-            putLine(where + ": * " + who + " " + arg);
-            super.eventAction(where, who, arg);
+            super.eventChannelList(where, names);
         }
 
-        public void eventChannelJoin(String where, String who) {
-            putLine("--- " + where + ": Joined: " + who);
-            names.add(who);
-            userList.setListData(names.toArray());
-            super.eventChannelJoin(where, who);
-        }
+        public void eventQuit(String who, String why) {
 
-        public void eventIdenting() {
-            putLine("--- Logging in...");
-            super.eventIdenting();
+            super.eventQuit(who, why);
         }
 
-        public void eventChannelPart(String where) {
-            putLine("--- You have now left channel " + where);
-            super.eventChannelPart(where);
+        public void eventNormalMessage(String where, String who, String arg) {
+            TextTab tab;
+            TabPair t = findTab("Channel: " + where);
+            if (t == null)
+                return;
+            tab = (TextTab) t.tab;
+            tab.putText("<" + who + "> " + arg);
+            super.eventNormalMessage(where, who, arg);
         }
 
-        public void eventChannelList(String where, java.util.Set newnames) {
-            int i;
-            names = newnames;
-            Iterator iter = names.iterator();
-            String line = "--- ";
-            userList.setListData(names.toArray());
-            putLine("--- Users for " + where + ": ");
-            i = 0;
-            while(iter.hasNext()) {
-                String nick = (String) iter.next();
-                if (i != 0) {
-                    line = line + " - ";
-                }
-                line = line + nick;
-                i++;
-                if (i == 4) {
-                    putLine(line);
-                    line = "--- ";
-                    i = 0;
-                }
-            }
-            if (i != 0) {
-                putLine(line);
-            }
-            super.eventChannelList(where, names);
+        public void eventChannelPart(String where, String who) {
+
+            super.eventChannelPart(where, who);
         }
 
-        public void eventQuit(String who, String why) {
-            names.remove(who);
-            userList.setListData(names.toArray());
-            putLine("--- " + who + " has quit: " + why);
-            super.eventQuit(who, why);
+        public void eventChannelJoin(String where, String who) {
+
+            super.eventChannelJoin(where, who);
         }
 
-        public void eventChannelPart(String where, String who) {
-            putLine("--- " + who + " has left " + where);
-            names.remove(who);
-            userList.setListData(names.toArray());
-            super.eventChannelPart(where, who);
+        public void eventAction(String where, String who, String arg) {
+
+            super.eventAction(where, who, arg);
         }
-
     }
 
-    public void putLine(String s) {
-        chatWindow.append(s + "\n");
+    public void disconnect() {
+        if (cli != null) {
+            cli.disconnect();
+            cli = null;
+        }
+        serverTab.putText(
+        "Welcome to haver!\n\n" +
+        "Enter your UID to begin."
+        );
+        status.setText("NOT CONNECTED");
     }
-
     
     /** This method is called from within the constructor to
      * initialize the form.
@@ -140,15 +168,17 @@
      * always regenerated by the Form Editor.
      */
     private void initComponents() {//GEN-BEGIN:initComponents
+        jTabbedPane1 = new javax.swing.JTabbedPane();
+        jPanel2 = new javax.swing.JPanel();
         input = new javax.swing.JTextField();
-        jSplitPane1 = new javax.swing.JSplitPane();
-        jScrollPane1 = new javax.swing.JScrollPane();
-        chatWindow = new javax.swing.JTextArea();
-        jScrollPane2 = new javax.swing.JScrollPane();
-        userList = new javax.swing.JList();
+        status = new javax.swing.JLabel();
 
         setLayout(new java.awt.BorderLayout());
 
+        add(jTabbedPane1, java.awt.BorderLayout.CENTER);
+
+        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, 
javax.swing.BoxLayout.Y_AXIS));
+
         input.setText("jTextField1");
         input.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -161,43 +191,106 @@
             }
         });
 
-        add(input, java.awt.BorderLayout.SOUTH);
+        jPanel2.add(input);
 
-        jScrollPane1.setViewportView(chatWindow);
+        status.setText("NOT CONNECTED");
+        status.setMinimumSize(new java.awt.Dimension(300, 300));
+        jPanel2.add(status);
 
-        jSplitPane1.setLeftComponent(jScrollPane1);
+        add(jPanel2, java.awt.BorderLayout.SOUTH);
 
-        jScrollPane2.setViewportView(userList);
-
-        jSplitPane1.setRightComponent(jScrollPane2);
-
-        add(jSplitPane1, java.awt.BorderLayout.CENTER);
-
     }//GEN-END:initComponents
 
     private void inputKeyTyped(java.awt.event.KeyEvent evt) 
{//GEN-FIRST:event_inputKeyTyped
-        // TODO add your handling code here:
-        if (evt.getKeyChar() == '\n') {
-            String line = input.getText();
-            input.setText("");
+        if (evt.getKeyChar() != '\n')
+            return;
+        if (cli == null) {
+            putServer("Connecting...");
+            status.setText("Connecting...");
+            cli = new Client();
             try {
-                cli.sendNormalMessage("lobby", line);
-            } catch (Exception e) { /* XXX */ }
+                cli.connect(uid = input.getText(), host, port);
+                input.setText("");
+                putServer("Connected, logging in...");
+                return;
+            } catch (IOException e) {
+                putServer("Failed: " + e.getLocalizedMessage());
+                status.setText("NOT CONNECTED");
+                return;
+            }
         }
+        String query = input.getText();
+        if (processLine(query)) {
+            input.setText("");
+        }
     }//GEN-LAST:event_inputKeyTyped
 
     private void inputActionPerformed(java.awt.event.ActionEvent evt) 
{//GEN-FIRST:event_inputActionPerformed
         // TODO add your handling code here:
     }//GEN-LAST:event_inputActionPerformed
     
+    private void putServer(String s) {
+        serverTab.putText(s);
+    }
     
+    protected void initCommands() {
+        commands.put("me", new CommandHandler() {
+            boolean trigger(String arg) throws IOException {
+                try {
+                    QueryTab q = (QueryTab) 
jTabbedPane1.getSelectedComponent();
+                    q.sendAction(arg);
+                    return true;
+                } catch(ClassCastException e) {
+                    return false;
+                }
+            }
+        });
+        commands.put("join", new CommandHandler() {
+            boolean trigger(String arg) throws IOException {
+                if (findTab(arg) != null) 
+                    return true;
+                cli.join(arg);
+                return true;
+            }
+        });
+    }
+    
+    public boolean processLine(String query) {
+        try {
+            if (query.charAt(0) == '/') {
+                if (query.charAt(1) != ' ') {
+                    String command, arg;
+                    int endcommand = query.indexOf(' ');
+                    if (endcommand == -1) {
+                        command = query.substring(1);
+                        arg = "";
+                    } else {
+                        command = query.substring(1, endcommand);
+                        arg = query.substring(endcommand + 1);
+                    }
+                    System.out.println("COMMAND: " + command + " ARG: " + arg);
+                    if (!commands.containsKey(command.toLowerCase()))
+                        return false;
+                    System.out.println("triggering\n");
+                    return 
((CommandHandler)commands.get(command)).trigger(arg);
+                }
+            }
+            try {
+                QueryTab tab = (QueryTab) jTabbedPane1.getSelectedComponent();
+                tab.sendText(query);
+                return true;
+            } catch (java.lang.ClassCastException ex) {
+                return false;
+            }
+        } catch (IOException e) { /* XXX */ }
+        return false;
+    }
+    
     // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JTextArea chatWindow;
     private javax.swing.JTextField input;
-    private javax.swing.JScrollPane jScrollPane1;
-    private javax.swing.JScrollPane jScrollPane2;
-    private javax.swing.JSplitPane jSplitPane1;
-    private javax.swing.JList userList;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JTabbedPane jTabbedPane1;
+    private javax.swing.JLabel status;
     // End of variables declaration//GEN-END:variables
     
 }

Added: trunk/misc/javer/src/javer/QueryTab.java
===================================================================
--- trunk/misc/javer/src/javer/QueryTab.java    2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/QueryTab.java    2005-01-07 01:50:13 UTC (rev 
529)
@@ -0,0 +1,16 @@
+/*
+ * QueryTab.java
+ *
+ * Created on January 6, 2005, 12:43 AM
+ */
+
+package javer;
+
+/**
+ *
+ * @author  bdonlan
+ */
+public interface QueryTab extends TextTab {
+    public void sendText(String s) throws java.io.IOException;
+    public void sendAction(String s) throws java.io.IOException;
+}


Property changes on: trunk/misc/javer/src/javer/QueryTab.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/misc/javer/src/javer/SimpleTextTab.form
===================================================================
--- trunk/misc/javer/src/javer/SimpleTextTab.form       2005-01-06 23:53:34 UTC 
(rev 528)
+++ trunk/misc/javer/src/javer/SimpleTextTab.form       2005-01-07 01:50:13 UTC 
(rev 529)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.0" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+
+  <Layout 
class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Constraints>
+        <Constraint 
layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" 
value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout 
class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JTextArea" name="textField">
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>

Added: trunk/misc/javer/src/javer/SimpleTextTab.java
===================================================================
--- trunk/misc/javer/src/javer/SimpleTextTab.java       2005-01-06 23:53:34 UTC 
(rev 528)
+++ trunk/misc/javer/src/javer/SimpleTextTab.java       2005-01-07 01:50:13 UTC 
(rev 529)
@@ -0,0 +1,50 @@
+/*
+ * SimpleTextTab.java
+ *
+ * Created on January 6, 2005, 2:26 PM
+ */
+
+package javer;
+
+/**
+ *
+ * @author  bdonlan
+ */
+public class SimpleTextTab extends javax.swing.JPanel implements TextTab {
+    
+    /** Creates new form SimpleTextTab */
+    protected SimpleTextTab() {
+        initComponents();
+    }
+    
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    private void initComponents() {//GEN-BEGIN:initComponents
+        jScrollPane1 = new javax.swing.JScrollPane();
+        textField = new javax.swing.JTextArea();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jScrollPane1.setViewportView(textField);
+
+        add(jScrollPane1, java.awt.BorderLayout.CENTER);
+
+    }//GEN-END:initComponents
+    
+    public void putText(String s) {
+        boolean atEnd =
+            (textField.getCaretPosition() == textField.getText().length() - 1);
+        textField.append(s + "\n");
+        if (atEnd)
+            textField.setCaretPosition(textField.getText().length() - 1);
+    }
+    
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextArea textField;
+    // End of variables declaration//GEN-END:variables
+    
+}


Property changes on: trunk/misc/javer/src/javer/SimpleTextTab.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/misc/javer/src/javer/TextTab.java
===================================================================
--- trunk/misc/javer/src/javer/TextTab.java     2005-01-06 23:53:34 UTC (rev 
528)
+++ trunk/misc/javer/src/javer/TextTab.java     2005-01-07 01:50:13 UTC (rev 
529)
@@ -0,0 +1,15 @@
+/*
+ * TextTab.java
+ *
+ * Created on January 6, 2005, 12:44 AM
+ */
+
+package javer;
+
+/**
+ *
+ * @author  bdonlan
+ */
+public interface TextTab {
+    public void putText(String s);
+}


Property changes on: trunk/misc/javer/src/javer/TextTab.java
___________________________________________________________________
Name: svn:eol-style
   + native


Reply via email to