diff --git a/src/sbbs3/userlist/SBBS_User_ListMain.cpp b/src/sbbs3/userlist/SBBS_User_ListMain.cpp index 1391e9444a6a63756f182a84583d2c88923da723..51760eb84c35cafb94687aea9d9e84341cd4b62a 100644 --- a/src/sbbs3/userlist/SBBS_User_ListMain.cpp +++ b/src/sbbs3/userlist/SBBS_User_ListMain.cpp @@ -43,7 +43,7 @@ wxString wxbuildinfo(wxbuildinfoformat format) //(*IdInit(SBBS_User_ListFrame) const long SBBS_User_ListFrame::ID_STATICTEXT1 = wxNewId(); -const long SBBS_User_ListFrame::ID_TEXTCTRL1 = wxNewId(); +const long SBBS_User_ListFrame::ID_ARSTEXTCTRL = wxNewId(); const long SBBS_User_ListFrame::ID_CLEARBUTTON = wxNewId(); const long SBBS_User_ListFrame::ID_USERLISTCTRL = wxNewId(); const long SBBS_User_ListFrame::ID_STATICTEXT2 = wxNewId(); @@ -60,7 +60,7 @@ BEGIN_EVENT_TABLE(SBBS_User_ListFrame,wxFrame) //*) END_EVENT_TABLE() -void fillUserList(wxListCtrl *UserList) +void SBBS_User_ListFrame::fillUserList(void) { int totalusers=lastuser(&App->cfg); int i; @@ -74,6 +74,10 @@ void fillUserList(wxListCtrl *UserList) user.number=i; if(getuserdat(&App->cfg, &user)!=0) continue; + if(ars!=NULL && ars != nular) { + if(!chk_ar(&App->cfg, ars, &user, NULL)) + continue; + } buf.Printf(_("%d"), i); item=UserList->InsertItem(i, buf, 0); @@ -119,14 +123,14 @@ SBBS_User_ListFrame::SBBS_User_ListFrame(wxWindow* parent,wxWindowID id) BoxSizer2 = new wxBoxSizer(wxHORIZONTAL); StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("ARS Filter"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); BoxSizer2->Add(StaticText1, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); - TextCtrl1 = new wxTextCtrl(this, ID_TEXTCTRL1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); - TextCtrl1->SetToolTip(_("Enter an ARS string to filter users with")); - BoxSizer2->Add(TextCtrl1, 1, wxALL|wxALIGN_TOP|wxALIGN_BOTTOM, 5); + ARSFilter = new wxTextCtrl(this, ID_ARSTEXTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_ARSTEXTCTRL")); + ARSFilter->SetToolTip(_("Enter an ARS string to filter users with")); + BoxSizer2->Add(ARSFilter, 1, wxALL|wxALIGN_TOP|wxALIGN_BOTTOM, 5); ClearButton = new wxButton(this, ID_CLEARBUTTON, _("Clear"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CLEARBUTTON")); ClearButton->SetToolTip(_("Clears the ARS filter")); BoxSizer2->Add(ClearButton, 0, wxALL|wxALIGN_TOP|wxALIGN_BOTTOM, 5); BoxSizer1->Add(BoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_TOP|wxALIGN_BOTTOM, 5); - UserList = new wxListCtrl(this, ID_USERLISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_HRULES, wxDefaultValidator, _T("ID_USERLISTCTRL")); + UserList = new wxListCtrl(this, ID_USERLISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_HRULES, wxDefaultValidator, _T("ID_USERLISTCTRL")); UserList->InsertColumn(0, wxString(_("Num"))); UserList->InsertColumn(1, wxString(_("Alias"))); UserList->InsertColumn(2, wxString(_("Name"))); @@ -142,7 +146,7 @@ SBBS_User_ListFrame::SBBS_User_ListFrame(wxWindow* parent,wxWindowID id) UserList->InsertColumn(12, wxString(_("Logons"))); UserList->InsertColumn(13, wxString(_("First On"))); UserList->InsertColumn(14, wxString(_("Last On"))); - fillUserList(UserList); + fillUserList(); BoxSizer1->Add(UserList, 1, wxALL|wxEXPAND|wxALIGN_TOP|wxALIGN_BOTTOM, 5); BoxSizer3 = new wxBoxSizer(wxHORIZONTAL); BoxSizer4 = new wxBoxSizer(wxHORIZONTAL); @@ -192,9 +196,37 @@ SBBS_User_ListFrame::SBBS_User_ListFrame(wxWindow* parent,wxWindowID id) BoxSizer1->Fit(this); BoxSizer1->SetSizeHints(this); + Connect(ID_ARSTEXTCTRL,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&SBBS_User_ListFrame::OnARSFilterText); + Connect(ID_CLEARBUTTON,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&SBBS_User_ListFrame::OnClearButtonClick); + Connect(ID_REFRESHBUTTON,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&SBBS_User_ListFrame::OnRefreshButtonClick); Connect(idMenuQuit,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&SBBS_User_ListFrame::OnQuit); Connect(idMenuAbout,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&SBBS_User_ListFrame::OnAbout); - //*) + //*) + + /* + * Ideally, this would go right after UserList is created + * and before it's added to the parent. + */ + + if(UserList->GetColumnCount()==0) { + fprintf(stderr,"No columns in UserList!\r\n"); + UserList->InsertColumn(0, wxString(_("Num"))); + UserList->InsertColumn(1, wxString(_("Alias"))); + UserList->InsertColumn(2, wxString(_("Name"))); + UserList->InsertColumn(3, wxString(_("Level"))); + UserList->InsertColumn(4, wxString(_("Age"))); + UserList->InsertColumn(5, wxString(_("Sex"))); + UserList->InsertColumn(6, wxString(_("Location"))); + UserList->InsertColumn(7, wxString(_("Protocol"))); + UserList->InsertColumn(8, wxString(_("Address"))); + UserList->InsertColumn(9, wxString(_("Host Name"))); + UserList->InsertColumn(10, wxString(_("Phone"))); + UserList->InsertColumn(11, wxString(_("Email"))); + UserList->InsertColumn(12, wxString(_("Logons"))); + UserList->InsertColumn(13, wxString(_("First On"))); + UserList->InsertColumn(14, wxString(_("Last On"))); + fillUserList(); + } } SBBS_User_ListFrame::~SBBS_User_ListFrame() @@ -213,3 +245,33 @@ void SBBS_User_ListFrame::OnAbout(wxCommandEvent& event) wxString msg = wxbuildinfo(long_f); wxMessageBox(msg, _("Welcome to...")); } + +void SBBS_User_ListFrame::OnRefreshButtonClick(wxCommandEvent& event) +{ + fillUserList(); +} + +void SBBS_User_ListFrame::OnARSFilterText(wxCommandEvent& event) +{ + static uchar *last_ars=NULL; + static ushort last_ars_count=0; + ushort count; + + if(!ARSFilter->IsModified()) + return; + + ars=arstr(&count, ARSFilter->GetValue().mb_str(wxConvUTF8), &App->cfg); + if(count != last_ars_count || memcmp(last_ars, ars, count)) { + if(last_ars != nular) + FREE_AND_NULL(last_ars); + last_ars=ars; + last_ars_count=count; + fillUserList(); + } +} + +void SBBS_User_ListFrame::OnClearButtonClick(wxCommandEvent& event) +{ + ARSFilter->SetValue(_("")); + OnARSFilterText(event); +} diff --git a/src/sbbs3/userlist/SBBS_User_ListMain.h b/src/sbbs3/userlist/SBBS_User_ListMain.h index 1de9ca97806d4caa80a14309b24cac71b51f4962..5585dc849b5b803c4c752d5a0bbd3f37a1ff05ad 100644 --- a/src/sbbs3/userlist/SBBS_User_ListMain.h +++ b/src/sbbs3/userlist/SBBS_User_ListMain.h @@ -33,14 +33,19 @@ class SBBS_User_ListFrame: public wxFrame private: + void fillUserList(void); + //(*Handlers(SBBS_User_ListFrame) void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); + void OnRefreshButtonClick(wxCommandEvent& event); + void OnARSFilterText(wxCommandEvent& event); + void OnClearButtonClick(wxCommandEvent& event); //*) //(*Identifiers(SBBS_User_ListFrame) static const long ID_STATICTEXT1; - static const long ID_TEXTCTRL1; + static const long ID_ARSTEXTCTRL; static const long ID_CLEARBUTTON; static const long ID_USERLISTCTRL; static const long ID_STATICTEXT2; @@ -59,11 +64,12 @@ class SBBS_User_ListFrame: public wxFrame wxListCtrl* UserList; wxStatusBar* StatusBar1; wxButton* ClearButton; - wxTextCtrl* TextCtrl1; wxButton* EditButton; + wxTextCtrl* ARSFilter; wxChoice* Choice1; - //*) - + //*) + + unsigned char *ars; DECLARE_EVENT_TABLE() }; diff --git a/src/sbbs3/userlist/userlist.depend b/src/sbbs3/userlist/userlist.depend index 26abf06b432d99586a9ee3ff7675166c2e81efb1..ced7cbe8a86d0a1267aa798e01540d9043f46613 100644 --- a/src/sbbs3/userlist/userlist.depend +++ b/src/sbbs3/userlist/userlist.depend @@ -349,7 +349,7 @@ 1316588509 /usr/local/include/wx-2.8/wx/gtk/app.h -1319424883 /synchronet/src/src/sbbs3/userlist/SBBS_User_ListMain.h +1319435465 /synchronet/src/src/sbbs3/userlist/SBBS_User_ListMain.h <wx/listctrl.h> <wx/sizer.h> <wx/stattext.h> @@ -844,7 +844,7 @@ 1316588509 /usr/local/include/wx-2.8/wx/generic/listctrl.h "wx/textctrl.h" -1319425188 source:/synchronet/src/src/sbbs3/userlist/SBBS_User_ListMain.cpp +1319434824 source:/synchronet/src/src/sbbs3/userlist/SBBS_User_ListMain.cpp "SBBS_User_ListMain.h" <wx/msgdlg.h> <wx/intl.h> @@ -974,7 +974,7 @@ 1318548475 /synchronet/src/src/sbbs3/fidodefs.h "gen_defs.h" -1318548475 /synchronet/src/src/sbbs3/ars_defs.h +1319435319 /synchronet/src/src/sbbs3/ars_defs.h <stdio.h> <stdlib.h> <string.h> @@ -1225,10 +1225,10 @@ 1318263568 source:/synchronet/src/src/sbbs3/str_util.c "sbbs.h" -1318263531 source:/synchronet/src/src/sbbs3/ars.c +1319435319 source:/synchronet/src/src/sbbs3/ars.c "sbbs.h" -1319425356 source:/synchronet/src/src/sbbs3/userdat.c +1319427985 source:/synchronet/src/src/sbbs3/userdat.c "sbbs.h" "cmdshell.h" diff --git a/src/sbbs3/userlist/wxsmith/SBBS_User_Listframe.wxs b/src/sbbs3/userlist/wxsmith/SBBS_User_Listframe.wxs index 9d9a1ce8651643f87502a59d8914ed2cf39395d3..c63d7c01eeada6c4f1f83ac61e3210c5fe13cc09 100644 --- a/src/sbbs3/userlist/wxsmith/SBBS_User_Listframe.wxs +++ b/src/sbbs3/userlist/wxsmith/SBBS_User_Listframe.wxs @@ -13,8 +13,9 @@ <border>5</border> </object> <object class="sizeritem"> - <object class="wxTextCtrl" name="ID_TEXTCTRL1" variable="TextCtrl1" member="yes"> + <object class="wxTextCtrl" name="ID_ARSTEXTCTRL" variable="ARSFilter" member="yes"> <tooltip>Enter an ARS string to filter users with</tooltip> + <handler function="OnARSFilterText" entry="EVT_TEXT" /> </object> <flag>wxALL|wxALIGN_TOP|wxALIGN_BOTTOM</flag> <border>5</border> @@ -24,6 +25,7 @@ <object class="wxButton" name="ID_CLEARBUTTON" variable="ClearButton" member="yes"> <label>Clear</label> <tooltip>Clears the ARS filter</tooltip> + <handler function="OnClearButtonClick" entry="EVT_BUTTON" /> </object> <flag>wxALL|wxALIGN_TOP|wxALIGN_BOTTOM</flag> <border>5</border> @@ -83,6 +85,7 @@ <object class="wxButton" name="ID_REFRESHBUTTON" variable="RefreshButton" member="yes"> <label>Refresh</label> <tooltip>Reloads the user database</tooltip> + <handler function="OnRefreshButtonClick" entry="EVT_BUTTON" /> </object> <flag>wxALL|wxALIGN_RIGHT|wxALIGN_TOP|wxALIGN_BOTTOM</flag> <border>5</border>