Author: egon
Date: 2004-10-14 04:06:23 -0400 (Thu, 14 Oct 2004)
New Revision: 399

Modified:
   trunk/clients/wxhaver/src/wxHaver.cpp
   trunk/clients/wxhaver/src/wxHaver.h
   trunk/clients/wxhaver/src/wxHaverFrame.cpp
   trunk/clients/wxhaver/src/wxHaverFrame.h
   trunk/clients/wxhaver/src/wxHaverWindows.cpp
   trunk/clients/wxhaver/src/wxHaverWindows.h
Log:
wxHaver user list works.

Modified: trunk/clients/wxhaver/src/wxHaver.cpp
===================================================================
--- trunk/clients/wxhaver/src/wxHaver.cpp       2004-10-12 15:19:35 UTC (rev 
398)
+++ trunk/clients/wxhaver/src/wxHaver.cpp       2004-10-14 08:06:23 UTC (rev 
399)
@@ -27,6 +27,7 @@
 class wxHaverApp : public wxApp
 {
        virtual bool OnInit();
+       virtual int OnExit();
 };
 
 
@@ -36,8 +37,16 @@
                        wxPoint(-1, -1), wxSize(800, 600));
        frame->Show(true);
        SetTopWindow(frame);
+       SetVendorName(_T("Sine, Inc."));
+       SetAppName(_T("wxHaver"));
        return true;
 }
 
+int wxHaverApp::OnExit()
+{
+       delete wxConfigBase::Set((wxConfigBase *) NULL);
+       return 0;
+}
+
 IMPLEMENT_APP(wxHaverApp); // I use these semicolons for vim's sake.
 

Modified: trunk/clients/wxhaver/src/wxHaver.h
===================================================================
--- trunk/clients/wxhaver/src/wxHaver.h 2004-10-12 15:19:35 UTC (rev 398)
+++ trunk/clients/wxhaver/src/wxHaver.h 2004-10-14 08:06:23 UTC (rev 399)
@@ -24,6 +24,8 @@
 #define WH_VERSION_MINOR       2
 #define WH_VERSION_STRING      "0.02a"
 
+#define wxUSE_CONFIG_NATIVE    0
+
 #include "wx/wxprec.h"
 
 #ifndef WX_PRECOMP
@@ -34,7 +36,10 @@
        WH_ID_Quit = 1,
        WH_ID_Connect,
        WH_CTRL_ServerSplitter,
-       WH_Socket /* No comma! */
+       WH_CTRL_Windows,
+       WH_CTRL_TextEntry,
+       WH_CTRL_UserList,
+       WH_Socket /* No comma! JA> Compiler warnings? */
 };
 
 #endif // WH_wxHaver_H

Modified: trunk/clients/wxhaver/src/wxHaverFrame.cpp
===================================================================
--- trunk/clients/wxhaver/src/wxHaverFrame.cpp  2004-10-12 15:19:35 UTC (rev 
398)
+++ trunk/clients/wxhaver/src/wxHaverFrame.cpp  2004-10-14 08:06:23 UTC (rev 
399)
@@ -26,8 +26,10 @@
 #include "wxHaverParser.h"
 #include "wxHaverWindows.h"
 #include "wx/socket.h"
+#include "wx/config.h"
 #include <vector>
 #include <map>
+#include <list>
 
 using namespace std;
 
@@ -38,13 +40,15 @@
                        wxHaverFrame::OnSashPosChanged)
        EVT_SIZE(wxHaverFrame::OnSize)
        EVT_SOCKET(WH_Socket, wxHaverFrame::OnSocketEvent)
-       EVT_TEXT_ENTER(-1, wxHaverFrame::OnEnterCommand)
+       EVT_TEXT_ENTER(WH_CTRL_TextEntry, wxHaverFrame::OnEnterCommand)
+       EVT_NOTEBOOK_PAGE_CHANGED(WH_CTRL_Windows, wxHaverFrame::OnPageChanged)
 END_EVENT_TABLE()
 
 wxHaverFrame::wxHaverFrame(const wxString &title, const wxPoint &pos,
                const wxSize &size):
        wxFrame((wxFrame*)NULL, -1, title, pos, size), _splitSize(100)
 {
+       wxConfigBase *conf = wxConfigBase::Get();
        //---------------------------//
        //  Menu stuff                           //
        //---------------------------//
@@ -66,11 +70,12 @@
        mServerSplit = new wxSplitterWindow(this, WH_CTRL_ServerSplitter,
                wxDefaultPosition, wxDefaultSize, wxSP_LIVE_UPDATE);
        
-       mTextEntry      = new wxTextCtrl(this, -1, _(""), wxDefaultPosition,
-                       wxDefaultSize, wxTE_PROCESS_ENTER);
+       mTextEntry      = new wxTextCtrl(this, WH_CTRL_TextEntry, _(""),
+                       wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
        
-       mChannels = new wxHaverWindows(mServerSplit, -1);
-       mUserList = new wxListBox(mServerSplit, -1);
+       mChannels = new wxHaverWindows(mServerSplit, WH_CTRL_Windows);
+       mUserList = new wxListBox(mServerSplit, WH_CTRL_UserList, 
wxDefaultPosition,
+                       wxDefaultSize, 0, NULL, 
wxLB_SINGLE|wxLB_HSCROLL|wxLB_SORT);
 
        //---------------------------//
        //  Miscellaeneous                       //
@@ -78,13 +83,6 @@
 
        wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
 
-       wxSize txtsize(mTextEntry->GetSize());
-       wxSize boxsize(mUserList->GetSize());
-       wxSize clientsize(GetClientSize());
-       mTextEntry->SetSize(0, clientsize.y - txtsize.y, clientsize.x, 
txtsize.y);
-       mUserList->SetSize(clientsize.x - 100, 0, 100, clientsize.y - 
txtsize.y);
-       mChannels->SetSize(0, 0, clientsize.x - 100, clientsize.y - txtsize.y);
-
        mServerSplit->SplitVertically(mChannels, mUserList, -_splitSize);
 
        topsizer->Add(mServerSplit, 1, wxGROW|wxEXPAND);
@@ -100,17 +98,26 @@
        //---------------------------//
 
        // {Server Commands}
-       wxHaverCallback<wxHaverFrame> *want;
-       want = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnWant);
+       wxHaverCallback<wxHaverFrame> *s_want;
+       s_want = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnWant);
+       wxHaverCallback<wxHaverFrame> *s_in;
+       s_in = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnIn);
+       wxHaverCallback<wxHaverFrame> *s_list;
+       s_list = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnList);
 
-       mParser.AddCommand("WANT", want);
+       mParser.AddCommand("WANT",      s_want);
+       mParser.AddCommand("IN",        s_in);
+       mParser.AddCommand("LIST",      s_list);
 
        // {Client Commands}
-       wxHaverCallback<wxHaverFrame> *join;
-       join = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnUJoin);
-
-       mUserParser.AddCommand("/join", join);
+       wxHaverCallback<wxHaverFrame> *u_join;
+       u_join = new wxHaverCallback<wxHaverFrame>(this, 
&wxHaverFrame::OnUJoin);
+       wxHaverCallback<wxHaverFrame> *u_raw;
+       u_raw = new wxHaverCallback<wxHaverFrame>(this, &wxHaverFrame::OnURaw);
        
+       mUserParser.AddCommand("/join", u_join);
+       mUserParser.AddCommand("/raw",  u_raw);
+       
        //---------------------------//
        //  Socket stuff                         //
        //---------------------------//
@@ -174,9 +181,10 @@
 
 void wxHaverFrame::OnConnect(wxCommandEvent& WXUNUSED(event))
 {
+       wxConfigBase *conf = wxConfigBase::Get();
        wxIPV4address addr;
-       addr.Hostname("localhost");
-       addr.Service(7070);
+       addr.Hostname(conf->Read("server", "localhost"));
+       addr.Service(conf->Read("port", 7070));
 
        mServer->AppendText(_T("\nConnecting to ") + addr.Hostname() + 
_("..."));
        mSock->Connect(addr, false);
@@ -203,6 +211,15 @@
        mTextEntry->Clear();
 }
 
+void wxHaverFrame::OnPageChanged(wxNotebookEvent &event)
+{
+       mUserList->Clear();
+       vector<wxString> users = mChannels->GetWindow(
+                       mChannels->GetPageText(event.GetSelection())).users;
+       for (vector<wxString>::iterator i = users.begin(); i != users.end(); 
i++)
+               mUserList->InsertItems(1, &*i, 0);
+}
+
 void wxHaverFrame::OnQuit(wxCommandEvent&)
 {
        Close(true);
@@ -214,20 +231,53 @@
 
 void wxHaverFrame::OnWant(vector<wxString> args)
 {
+       wxConfigBase *conf = wxConfigBase::Get();
        *mServer << "\nReceived WANT...";
        if (args[0] == "IDENT") {
-               *mSock << "IDENT" << "nornagon" << CRLF;
+               *mSock << "IDENT" << conf->Read("nick", "nornagon") << CRLF;
        }
        return;
 }
 
+void wxHaverFrame::OnIn(vector<wxString> args)
+{
+       mInChannel = args[0];
+       printf("Now in channel %s\n", args[0].c_str());
+       args.erase(args.begin());
+       wxString line = Splice(args, "\t") + CRLF;
+       mParser.Parse(line);
+       return;
+}
+
+void wxHaverFrame::OnList(vector<wxString> args)
+{
+       wxString cid = args[0];
+       wxString ns = args[1];
+       // I wish vectors supported better erasing.
+       args.erase(args.begin()); args.erase(args.begin());
+       if (ns == "user") {
+               mChannels->GetWindow(cid).users = args;
+       }
+       return;
+}
+
 //------------------------------------------------------------------------
 //  User Command Callbacks
 //------------------------------------------------------------------------
 
 void wxHaverFrame::OnUJoin(vector<wxString> args)
 {
-       printf("args[0] = \"%s\"", args[0].c_str());
        mChannels->Join(args[0]);
        return;
 }
+
+void wxHaverFrame::OnURaw(vector<wxString> args)
+{
+       *mServer << "\n" << args[0] << "\n";
+       args = Split(args[0], " ");
+       for (vector<wxString>::iterator i = args.begin(); i != args.end(); i++) 
{
+               *mSock << *i;
+       }
+       *mSock << CRLF;
+       return;
+}

Modified: trunk/clients/wxhaver/src/wxHaverFrame.h
===================================================================
--- trunk/clients/wxhaver/src/wxHaverFrame.h    2004-10-12 15:19:35 UTC (rev 
398)
+++ trunk/clients/wxhaver/src/wxHaverFrame.h    2004-10-14 08:06:23 UTC (rev 
399)
@@ -28,6 +28,7 @@
 #include "wx/splitter.h"
 #include "wx/socket.h"
 #include "wx/notebook.h"
+#include "wx/config.h"
 #include <vector>
 
 class wxHaverFrame : public wxFrame
@@ -45,20 +46,25 @@
                void OnSashPosChanged(wxSplitterEvent&);
                void OnSocketEvent(wxSocketEvent&);
                void OnEnterCommand(wxCommandEvent&);
+               void OnPageChanged(wxNotebookEvent&);
 
                void OnWant(std::vector<wxString>);
+               void OnIn(std::vector<wxString>);
+               void OnList(std::vector<wxString>);
 
                void OnUJoin(std::vector<wxString>);
+               void OnURaw(std::vector<wxString>);
        private:
-               wxHaverSockClient *mSock;
-               wxSplitterWindow *mServerSplit;
-               wxHaverWindows *mChannels;
-               wxTextCtrl      *mTextEntry;
-               wxTextCtrl      *mServer;
-               wxListBox       *mUserList;
-               wxHaverParser mParser;
-               wxHaverUserParser mUserParser;
-               wxString        mBuf;
+               wxHaverSockClient*      mSock;
+               wxSplitterWindow*       mServerSplit;
+               wxHaverWindows*         mChannels;
+               wxTextCtrl*                     mTextEntry;
+               wxTextCtrl*                     mServer;
+               wxListBox*                      mUserList;
+               wxHaverParser           mParser;
+               wxHaverUserParser       mUserParser;
+               wxString                        mBuf;
+               wxString                        mInChannel;
                int _splitSize;
 
        DECLARE_EVENT_TABLE()

Modified: trunk/clients/wxhaver/src/wxHaverWindows.cpp
===================================================================
--- trunk/clients/wxhaver/src/wxHaverWindows.cpp        2004-10-12 15:19:35 UTC 
(rev 398)
+++ trunk/clients/wxhaver/src/wxHaverWindows.cpp        2004-10-14 08:06:23 UTC 
(rev 399)
@@ -71,6 +71,7 @@
 {
        *_sock << "JOIN" << cid << CRLF;
        NewWindow(cid);
+       *_sock << "LIST" << cid << "user" << CRLF;
        return 0;
 }
 
@@ -100,3 +101,8 @@
 {
        return windows[id]->text;
 }
+
+wxHaverWindows::Page &wxHaverWindows::GetWindow(wxString id)
+{
+       return *windows[id];
+}

Modified: trunk/clients/wxhaver/src/wxHaverWindows.h
===================================================================
--- trunk/clients/wxhaver/src/wxHaverWindows.h  2004-10-12 15:19:35 UTC (rev 
398)
+++ trunk/clients/wxhaver/src/wxHaverWindows.h  2004-10-14 08:06:23 UTC (rev 
399)
@@ -25,6 +25,7 @@
 #include "wxHaverParser.h"
 #include "wx/notebook.h"
 #include <map>
+#include <list>
 
 class wxHaverWindows : public wxNotebook
 {
@@ -39,6 +40,7 @@
                struct Page {
                        wxWindow *window;
                        wxTextCtrl *text;
+                       std::vector<wxString> users;
                };
                void SetSock(wxHaverSockClient *sock);
                void NewWindow(wxString title);
@@ -48,6 +50,7 @@
                int Part(wxString cid);
                void Message(wxString id, wxString message);
                wxTextCtrl *Window(wxString id);
+               Page &GetWindow(wxString id);
        private:
                void DelWindow(wxString title);
                wxHaverSockClient *_sock;


Reply via email to