Author: bdonlan
Date: 2005-01-06 23:14:34 -0500 (Thu, 06 Jan 2005)
New Revision: 532

Added:
   trunk/misc/javer/src/javer/UserQueryTab.java
Modified:
   /
   trunk/misc/javer/src/javer/ChannelTab.java
   trunk/misc/javer/src/javer/HaverClient.java
   trunk/misc/javer/src/javer/JaverUIPanel.java
   trunk/misc/javer/src/javer/SimpleTextTab.java
Log:
 [EMAIL PROTECTED]:  bdonlan | 2005-01-07T04:13:27.126830Z
 Added user queries; fixed splitpane positioning bug



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

Modified: trunk/misc/javer/src/javer/ChannelTab.java
===================================================================
--- trunk/misc/javer/src/javer/ChannelTab.java  2005-01-07 02:22:52 UTC (rev 
531)
+++ trunk/misc/javer/src/javer/ChannelTab.java  2005-01-07 04:14:34 UTC (rev 
532)
@@ -7,6 +7,8 @@
 package javer;
 import java.io.*;
 import java.util.*;
+import java.awt.*;
+
 /**
  *
  * @author  bdonlan
@@ -16,6 +18,7 @@
     HaverClient cli;
     String channel;
     Set users;
+    boolean positioned = false;
     
     /** Creates new form ChannelTab */
     public ChannelTab(HaverClient cli, String channel) {
@@ -25,6 +28,10 @@
         initComponents();
     }
     
+    public String getChannel() {
+        return channel;
+    }
+    
     /** This method is called from within the constructor to
      * initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is
@@ -60,11 +67,13 @@
     }
 
     public void putText(String s) {
-        boolean atEnd =
-            (chatArea.getCaretPosition() == chatArea.getText().length() - 1);
+        /* XXX: this is a bit of a hack */
+        if (!positioned) {
+            jSplitPane1.setDividerLocation(0.8);
+            positioned = true;
+        }
         chatArea.append(s + "\n");
-        if (atEnd)
-            chatArea.setCaretPosition(chatArea.getText().length() - 1);
+        chatArea.setCaretPosition(chatArea.getText().length());
     }
     
     public void updateUsers() {

Modified: trunk/misc/javer/src/javer/HaverClient.java
===================================================================
--- trunk/misc/javer/src/javer/HaverClient.java 2005-01-07 02:22:52 UTC (rev 
531)
+++ trunk/misc/javer/src/javer/HaverClient.java 2005-01-07 04:14:34 UTC (rev 
532)
@@ -56,6 +56,10 @@
         start();
     }
     
+    public String getUID() {
+        return uid;
+    }
+    
     public void connect(String uid, String hostname) throws 
java.io.IOException {
         connect(uid, hostname, 7070);
     }
@@ -122,6 +126,12 @@
                 eventMessage(args[1], args[2], args[3], msgArgs);
             }
         });
+        serverevents.put("PMSG", new ServerHandler() {
+            public void trigger(String[] args) {
+                String[] msgArgs = subStringArray(args, 3, args.length - 1);
+                eventPrivateMessage(args[1], args[2], msgArgs);
+            }
+        });
         serverevents.put("JOIN", new ServerHandler() {
             public void trigger(String[] args) {
                 if (args[2].equals(uid)) {
@@ -178,6 +188,10 @@
         send("JOIN\t" + channel);
     }
 
+    public void part(String channel) throws java.io.IOException {
+        send("PART\t" + channel);
+    }
+    
     public void eventIdentAccepted() {
         /* STUB */
     }
@@ -221,6 +235,21 @@
         /* STUB */
     }
     
+    public void eventPrivateMessage(String who, String type, String[] args) {
+        if (type.equals("\"")) {
+            eventPrivateNormalMessage(who, args[0]);
+        } else if (type.equals(":")) {
+            eventPrivateAction(who, args[0]);
+        }
+    }
+
+    public void eventPrivateNormalMessage(String who, String arg) {
+        /* STUB */
+    }
+    public void eventPrivateAction(String who, String arg) {
+        /* STUB */
+    }
+    
     public void eventChannelList(String where, Set names) {
         /* STUB */
     }
@@ -255,7 +284,27 @@
     public void sendAction(String where, String message) throws IOException {
         sendMessage(where, ":", message);
     }
-
+    
+    public void sendPrivateMessage(String target, String type, String message) 
throws IOException {
+        send("PMSG\t" + target + "\t" + type + "\t" + message);
+    }
+    
+    public void sendPrivateMessage(String target, String type, String[] 
message) throws IOException {
+        String s = "PMSG\t" + target + "\t" + type + "\t";
+        for (int i = 0; i < message.length; i++) {
+            s = s + message[i];
+        }
+        send(s);
+    }
+    
+    public void sendPrivateNormalMessage(String target, String message) throws 
IOException {
+        sendPrivateMessage(target, "\"", message);
+    }
+    
+    public void sendPrivateAction(String target, String message) throws 
IOException {
+        sendPrivateMessage(target, ":", message);
+    }
+    
     public void eventIdenting() {
         /* STUB */
     }

Modified: trunk/misc/javer/src/javer/JaverUIPanel.java
===================================================================
--- trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-07 02:22:52 UTC 
(rev 531)
+++ trunk/misc/javer/src/javer/JaverUIPanel.java        2005-01-07 04:14:34 UTC 
(rev 532)
@@ -20,6 +20,9 @@
     int port = 7070;
     Map commands = new HashMap();
     Map tabs = new HashMap();
+    Map channelTabs = new HashMap();
+    Map userTabs = new HashMap();
+    Map tabToPair = new HashMap();
     TabPair serverTabPair = new TabPair();
     SimpleTextTab serverTab = new SimpleTextTab();
     
@@ -49,7 +52,9 @@
     protected void addTab(TabPair p) {
         p.index = jTabbedPane1.getTabCount();
         jTabbedPane1.addTab(p.title, p.tab);
+        jTabbedPane1.setSelectedIndex(p.index);
         tabs.put(p.title, p);
+        tabToPair.put(p.tab, p);
     }
     
     protected TabPair findTab(String tag) {
@@ -61,6 +66,7 @@
         Iterator it;
         if (p == null || !tabs.containsValue(p))
             return;
+        jTabbedPane1.removeTabAt(p.index);
         tabs.remove(p.title);
         it = tabs.values().iterator();
         while (it.hasNext()) {
@@ -69,8 +75,34 @@
                 x.index--;
             }
         }
+        try {
+            channelTabs.remove(((ChannelTab)p.tab).getChannel());
+        } catch (ClassCastException e) {}
+        try {
+            userTabs.remove(((UserQueryTab)p.tab).getUID());
+        } catch (ClassCastException e) {}   
+        tabToPair.remove(p.tab);
     }
     
+    protected void killTab(java.awt.Component t) {
+        TabPair p = (TabPair)tabToPair.get(t);
+        if (p.index == 0)
+            return;
+        killTab(p);
+    }
+    
+    protected UserQueryTab getQuery(String who) {
+        TabPair p = (TabPair)userTabs.get(who);
+        if (p != null)
+            return (UserQueryTab)p.tab;
+        p = new TabPair();
+        p.title = "Query: " + who;
+        p.tab = new UserQueryTab(cli, who);
+        addTab(p);
+        userTabs.put(who, p);
+        return (UserQueryTab)p.tab;
+    }
+    
     public class Client extends HaverClient {
         public void eventDebugMessage(String s) {
             System.out.println(s);
@@ -89,17 +121,19 @@
         }
 
         public void eventChannelPart(String where) {
-            killTab(findTab("Channel: " + where));
+            killTab((TabPair)channelTabs.get(where));
+            channelTabs.remove(where);
             super.eventChannelPart(where);
         }
 
         public void eventChannelJoin(String where) {
-            TabPair t = findTab(where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null) {
                 t = new TabPair();
                 t.tab = new ChannelTab(cli, where);
                 t.title = "Channel: " + where;
                 addTab(t);
+                channelTabs.put(where, t);
             }
             QueryTab qt = (QueryTab) t.tab;
             qt.putText("--- Joined " + where);
@@ -116,7 +150,7 @@
 
         public void eventChannelList(String where, Set names) {
             ChannelTab tab;
-            TabPair t = findTab("Channel: " + where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null)
                 return;
             tab = (ChannelTab) t.tab;
@@ -143,7 +177,7 @@
 
         public void eventNormalMessage(String where, String who, String arg) {
             TextTab tab;
-            TabPair t = findTab("Channel: " + where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null)
                 return;
             tab = (TextTab) t.tab;
@@ -153,7 +187,7 @@
 
         public void eventChannelPart(String where, String who) {
             ChannelTab tab;
-            TabPair t = findTab("Channel: " + where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null)
                 return;
             tab = (ChannelTab) t.tab;
@@ -164,7 +198,7 @@
 
         public void eventChannelJoin(String where, String who) {
             ChannelTab tab;
-            TabPair t = findTab("Channel: " + where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null)
                 return;
             tab = (ChannelTab) t.tab;
@@ -178,13 +212,28 @@
 
         public void eventAction(String where, String who, String arg) {
             TextTab tab;
-            TabPair t = findTab("Channel: " + where);
+            TabPair t = (TabPair) channelTabs.get(where);
             if (t == null)
                 return;
             tab = (TextTab) t.tab;
             tab.putText("* " + who + " " + arg);
             super.eventAction(where, who, arg);
         }
+
+        public void eventPrivateMessage(String who, String type, String[] 
args) {
+
+            super.eventPrivateMessage(who, type, args);
+        }
+
+        public void eventPrivateNormalMessage(String who, String arg) {
+            getQuery(who).putText("<" + who + "> " + arg);
+            super.eventPrivateNormalMessage(who, arg);
+        }
+
+        public void eventPrivateAction(String who, String arg) {
+            getQuery(who).putText("* " + who + " " + arg);
+            super.eventPrivateAction(who, arg);
+        }
     }
 
     public void disconnect() {
@@ -284,12 +333,82 @@
         });
         commands.put("join", new CommandHandler() {
             boolean trigger(String arg) throws IOException {
-                if (findTab(arg) != null) 
+                if (channelTabs.containsKey(arg))
                     return true;
                 cli.join(arg);
                 return true;
             }
         });
+        commands.put("part", new CommandHandler() {
+            boolean trigger(String arg) throws IOException {
+                if (arg == "") {
+                    try {
+                        ChannelTab t;
+                        t = (ChannelTab) jTabbedPane1.getSelectedComponent();
+                        arg = t.getChannel();
+                    } catch (ClassCastException e) {
+                        return false;
+                    }
+                }
+                if (!channelTabs.containsKey(arg))
+                    return true;
+                cli.part(arg);
+                return true;
+            }
+        });
+        commands.put("quit", new CommandHandler() {
+            boolean trigger(String arg) {
+                System.exit(0);
+                return false;
+            }
+        });
+        commands.put("query", new CommandHandler() {
+            boolean trigger(String arg) {
+                UserQueryTab tab = getQuery(arg);
+                jTabbedPane1.setSelectedComponent(tab);
+                return true;
+            }
+        });
+        commands.put("msg", new CommandHandler() {
+            boolean trigger(String arg) {
+                UserQueryTab tab;
+                String who, what;
+                int space = arg.indexOf(' ');
+                if (space == -1)
+                    return false;
+                who = arg.substring(0, space);
+                what = arg.substring(space + 1);
+                
+                tab = getQuery(who);
+                try {
+                    tab.sendText(what);
+                } catch (IOException e) { /* XXX */ }
+                return true;
+            }
+        });
+        commands.put("act", new CommandHandler() {
+            boolean trigger(String arg) {
+                UserQueryTab tab;
+                String who, what;
+                int space = arg.indexOf(' ');
+                if (space == -1)
+                    return false;
+                who = arg.substring(0, space);
+                what = arg.substring(space + 1);
+                
+                tab = getQuery(who);
+                try {
+                    tab.sendAction(what);
+                } catch (IOException e) { /* XXX */ }
+                return true;
+            }
+        });
+        commands.put("close", new CommandHandler() {
+            boolean trigger(String arg) {
+                killTab(jTabbedPane1.getSelectedComponent());
+                return true;
+            }
+        });
     }
     
     public boolean processLine(String query) {
@@ -310,6 +429,8 @@
                         return false;
                     System.out.println("triggering\n");
                     return 
((CommandHandler)commands.get(command)).trigger(arg);
+                } else {
+                    query = query.substring(2);
                 }
             }
             try {

Modified: trunk/misc/javer/src/javer/SimpleTextTab.java
===================================================================
--- trunk/misc/javer/src/javer/SimpleTextTab.java       2005-01-07 02:22:52 UTC 
(rev 531)
+++ trunk/misc/javer/src/javer/SimpleTextTab.java       2005-01-07 04:14:34 UTC 
(rev 532)
@@ -35,11 +35,8 @@
     }//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);
+        textField.setCaretPosition(textField.getText().length() - 1);
     }
     
     // Variables declaration - do not modify//GEN-BEGIN:variables

Added: trunk/misc/javer/src/javer/UserQueryTab.java
===================================================================
--- trunk/misc/javer/src/javer/UserQueryTab.java        2005-01-07 02:22:52 UTC 
(rev 531)
+++ trunk/misc/javer/src/javer/UserQueryTab.java        2005-01-07 04:14:34 UTC 
(rev 532)
@@ -0,0 +1,40 @@
+/*
+ * UserQueryTab.java
+ *
+ * Created on January 6, 2005, 10:39 PM
+ */
+
+package javer;
+
+/**
+ *
+ * @author bdonlan
+ */
+public class UserQueryTab extends SimpleTextTab implements QueryTab {
+    
+    String who;
+    HaverClient cli;
+    
+    /** Creates a new instance of UserQueryTab */
+    public UserQueryTab(HaverClient cli, String who) {
+        super();
+        this.cli = cli;
+        this.who = who;
+        putText("--- Opening query with: " + who);
+    }
+
+    public String getUID() {
+        return who;
+    }
+    
+    public void sendAction(String s) throws java.io.IOException {
+        putText("* " + cli.getUID() + " " + s);
+        cli.sendPrivateAction(who, s);
+    }
+
+    public void sendText(String s) throws java.io.IOException {
+        putText("<" + cli.getUID() + "> " + s);
+        cli.sendPrivateNormalMessage(who, s);
+    }
+    
+}


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


Reply via email to