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;