From: <ma...@us...> - 2003-11-19 23:22:59
|
Update of /cvsroot/sharedaemon/ui-wx/src In directory sc8-pr-cvs1:/tmp/cvs-serv10595/src Modified Files: ServerWnd.cpp ServerWnd.h xMuleGUI_wdr.cpp xMuleGUI.wdr Added Files: SBPanel.cpp SBPanel.h Log Message: Reimplemented SideBar in a dynamic manner. --- NEW FILE: SBPanel.cpp --- /* * This file is part of xMule2. * Copyright (C) 2003 Alo Sarv <ma...@us...> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef __GNUG__ #pragma implementation "SBPanel.cpp" #endif // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #include "SBPanel.h" /** * CSBPanel class */ BEGIN_EVENT_TABLE(CSBPanel, wxPanel) EVT_BUTTON(-1, CSBPanel::Toggle) END_EVENT_TABLE() /** * Constructor for CSBPanel object. We create a Static Box inside this panel * and a "headerbutton" which will then provide us with toggling functionality. */ CSBPanel::CSBPanel( wxWindow *parent, wxWindowID id, const wxString &title, const wxString &name ) : wxPanel( parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, name) { wxStaticBox *box = new wxStaticBox(this, -1, wxT("")); mainsizer = new wxStaticBoxSizer(box, wxVERTICAL); headerbtn = new wxButton( this, -1, title, wxDefaultPosition, wxDefaultSize, 0 ); headerbtn->SetFont( wxFont( 12, wxROMAN, wxNORMAL, wxBOLD ) ); mainsizer->Add( headerbtn, 0, wxGROW, 5 ); SetAutoLayout(true); SetSizer(mainsizer); mainsizer->Fit(this); mainsizer->SetSizeHints(this); } CSBPanel::~CSBPanel() { m_config->Write( wxT("/")+GetParent()->GetName()+wxT("/")+GetName(), content->IsShown() ); } /** * Toggle method provides functionality for showing/hiding the contents * of this panel. First we check that the triggered event actually belongs * to our toggler-button. If so, we Hide the content, and call Fit() and * Layout() as neccesery. */ void CSBPanel::Toggle(wxCommandEvent &event) { if (event.GetId() != headerbtn->GetId()) { event.Skip(); return; } if (content->IsShown()) { mainsizer->Hide(content); content->Hide(); } else { mainsizer->Show(content); content->Show(); } mainsizer->SetMinSize(GetParent()->GetSize().GetWidth()-5, -1); mainsizer->Fit(this); GetParent()->GetSizer()->Layout(); ::wxGetTopLevelParent(this)->Layout(); } /** * This method adds contents (a panel) into the section. We store * the pointer to the content panel locally for easier access. * If there is any existing content in CSBPAnel, it is removed. * And last, read from config under section /ParentWindowName/SectionName * if the new section should be shown or not (default: true) */ void CSBPanel::SetContent(wxPanel *data) { bool shown; if (content) { mainsizer->Remove(content); } content = data; mainsizer->Add(content, 0, wxGROW|wxALL, 5); mainsizer->Fit(this); mainsizer->Layout(); m_config->Read( wxT("/")+GetParent()->GetName()+wxT("/")+GetName(), &shown, true ); if (!shown) { /** * We create an empty event with headerbtn ID and send it to * Toggle, since Toggle doesn't accept events with any other IDs */ wxCommandEvent nullevent; nullevent.SetId(headerbtn->GetId()); Toggle(nullevent); } } --- NEW FILE: SBPanel.h --- /* * This file is part of xMule2. * Copyright (C) 2003 Alo Sarv <ma...@us...> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __SBPanel_H__ #define __SBPanel_H__ #ifdef __GNUG__ #pragma interface "SBPanel.cpp" #endif #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "defines.h" /** * SBPanel, or SideBar Panel is a panel with a button on top of it * that provides its "closing" and "opening" functionality. * Usage: * Create new CSBPanel object and call SetContent(wxPanel *data) to * populate the panel with contents. You CAN NOT set two contents to * one section, but calling SetContent() at later time will replace * current contents with new contents. */ class CSBPanel : public wxPanel { public: CSBPanel( wxWindow *parent, wxWindowID id, const wxString &title, const wxString &name ); virtual ~CSBPanel(); void SetContent(wxPanel *data); void Toggle(wxCommandEvent &event); private: DECLARE_EVENT_TABLE(); wxStaticBoxSizer *mainsizer; wxPanel *content; wxButton *headerbtn; bool shown; }; #endif Index: ServerWnd.cpp =================================================================== RCS file: /cvsroot/sharedaemon/ui-wx/src/ServerWnd.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- ServerWnd.cpp 17 Nov 2003 03:59:54 -0000 1.35 +++ ServerWnd.cpp 19 Nov 2003 23:22:07 -0000 1.36 @@ -38,20 +38,6 @@ BEGIN_EVENT_TABLE(CServerWnd,wxPanel) EVT_BUTTON(ID_BTN_TOGGLE_SIDEBAR, CServerWnd::ToggleSidebar) - EVT_BUTTON(ID_BTN_SHOW_ADDSERVER, CServerWnd::ToggleAddServerPanel) - EVT_BUTTON(ID_BTN_SHOW_UPDATELIST, CServerWnd::ToggleUpdateServerPanel) - EVT_BUTTON( - ID_BTN_SHOW_SERVERSETTINGS, - CServerWnd::ToggleServerSettingsPanel - ) - EVT_BUTTON( - ID_BTN_SHOW_PORT_OPTIONS, - CServerWnd::TogglePortSettingsPanel - ) - EVT_BUTTON( - ID_BTN_SHOW_LOGGINGOPTIONS, - CServerWnd::ToggleLogOptionsPanel - ) EVT_BUTTON(ID_ADDTOLIST, CServerWnd::AddNewServer) EVT_BUTTON(ID_UPDATE, CServerWnd::UpdateFromURL) EVT_SIZE(CServerWnd::OnSize) @@ -73,7 +59,9 @@ * Read SideBar value from config object, and if it * returns false, toggle (hide) the sidebar. */ - m_config->Read(wxT("/ServerWnd/SideBar"), &show_sidebar, true); + m_config->Read( + wxT("/ServerWnd/SideBar"), &show_sidebar, true + ); if (!show_sidebar) { wxCommandEvent null_event; ToggleSidebar(null_event); @@ -112,19 +100,6 @@ } m_config->Write(wxT("SideBar"), sidebar->IsShown()); - m_config->Write(wxT("SideBar_AddServer"), addserverpanel->IsShown()); - m_config->Write(wxT("SideBar_UpdateServer"), - updateserverpanel->IsShown() - ); - m_config->Write(wxT("SideBar_ServerSettings"), - settingspanel->IsShown() - ); - m_config->Write(wxT("SideBar_PortSettings"), - portsettingspanel->IsShown() - ); - m_config->Write(wxT("SideBar_LoggingOptions"), - logoptionspanel->IsShown() - ); } /** @@ -179,90 +154,79 @@ /* Creates server page controls */ void CServerWnd::CreateControls() { int horizontal_splitter_pos; - bool show_addserver, show_updateserver, show_serversettings, - show_portsettings, show_logoptions; - wxString closed; - /* Flexgridsizer with two columns, second of them being growable. */ + /* Flexgridsizer with three columns, third of them being growable. */ mainsizer = new wxFlexGridSizer(3); mainsizer->AddGrowableCol( 2 ); mainsizer->AddGrowableRow( 0 ); - /* First add the sidebar, its going to be the left-most control. */ + + /** + * First add the sidebar, its going to be the left-most control. + * Altough the name of the panel is never displayed, it is used + * for saving its settings into config file, DONT MODIFY/DELETE it. + */ sidebar = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize, - wxNO_FULL_REPAINT_ON_RESIZE); - Server_Sidebar(sidebar, true, true); - mainsizer->Add(sidebar, 0, wxGROW|wxTOP|wxBOTTOM, 5); - - /* Create sidebar panels */ - addserverpanel = new wxPanel(sidebar); - updateserverpanel = new wxPanel(sidebar); - settingspanel = new wxPanel(sidebar); - portsettingspanel = new wxPanel(sidebar); - logoptionspanel = new wxPanel(sidebar); + wxNO_FULL_REPAINT_ON_RESIZE|wxGROW, wxT("ServerWnd") + ); + /* Sidebar panel needs a sizer also for managing its children. */ + wxFlexGridSizer *sbmain = new wxFlexGridSizer(1, 0, 0); + sbmain->AddGrowableCol(0); - /* Insert content into them */ - Server_AddServerPanel(addserverpanel, true, true); - Server_UpdatePanel(updateserverpanel, true, true); - Server_SettingsPanel(settingspanel, true, true); - Server_PortSettingsPanel(portsettingspanel, true, true); - Server_LogOptionsPanel(logoptionspanel, true, true); + sidebar->SetSizer(sbmain); + sidebar->SetAutoLayout(true); + sbmain->Fit(sidebar); + sbmain->SetSizeHints(sidebar); - /* Set button labels */ - closed = wxT(" >>"); - GetBtnToggleAddServer()->SetLabel(_("Add a server") + closed); - GetBtnToggleUpdateServer()->SetLabel(_("Update from URL") + closed); - GetBtnToggleServerSettings()->SetLabel(_("Server settings") + closed); - GetBtnTogglePortSettings()->SetLabel(_("Port settings") + closed); - GetBtnToggleLogOptions()->SetLabel(_("Logging options") + closed); - - /* Hide all of them */ - addserverpanel->Hide(); - updateserverpanel->Hide(); - settingspanel->Hide(); - portsettingspanel->Hide(); - logoptionspanel->Hide(); + /* Add the sidebar to mainsizer. */ + mainsizer->Add(sidebar, 0, wxGROW|wxTOP|wxBOTTOM|wxADJUST_MINSIZE, 5); - /* Read from config object which ones should be shown */ - m_config->Read( - wxT("/ServerWnd/SideBar_AddServer"), - &show_addserver, false - ); - m_config->Read( - wxT("/ServerWnd/SideBar_UpdateServer"), - &show_updateserver, false + /** + * Create new CSBPanel object which provides framework for + * opening/closing the section. Then create a new panel to store + * the contents of the section, and attach it to CSBPanel. + * Finally, append the CSBPanel to our sidebar panel. + */ + CSBPanel *addserver = new CSBPanel( + sidebar, -1, _("Add new server"), wxT("SideBar_AddServer") ); - m_config->Read( - wxT("/ServerWnd/SideBar_ServerSettings"), - &show_serversettings, true + wxPanel *addserver_cnt = new wxPanel(addserver, -1); + Server_AddServerPanel(addserver_cnt); + addserver->SetContent(addserver_cnt); + sbmain->Add(addserver, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 0); + + CSBPanel *updatelist = new CSBPanel( + sidebar, -1, _("Update from URL"), wxT("SideBar_UpdateServer") ); - m_config->Read( - wxT("/ServerWnd/SideBar_PortSettings"), - &show_portsettings, false + wxPanel *updatelist_cnt = new wxPanel(updatelist, -1); + Server_UpdatePanel(updatelist_cnt); + updatelist->SetContent(updatelist_cnt); + sbmain->Add(updatelist, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 0); + + CSBPanel *serversettings = new CSBPanel( + sidebar, -1, _("Server settings"), wxT("SideBar_ServerSettings") ); - m_config->Read( - wxT("/ServerWnd/SideBar_LoggingOptions"), - &show_logoptions, true + wxPanel *serversettings_cnt = new wxPanel(serversettings, -1); + Server_SettingsPanel(serversettings_cnt); + serversettings->SetContent(serversettings_cnt); + sbmain->Add(serversettings, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 0); + + CSBPanel *portsettings = new CSBPanel( + sidebar, -1, _("Port settings"), wxT("SideBar_PortSettings") ); + wxPanel *portsettings_cnt = new wxPanel(portsettings, -1); + Server_PortSettingsPanel(portsettings_cnt); + portsettings->SetContent(portsettings_cnt); + sbmain->Add(portsettings, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 0); - /* Call Toggle methods with null event as needed */ - wxCommandEvent null_event; - if (show_addserver) { - ToggleAddServerPanel(null_event); - } - if (show_updateserver) { - ToggleUpdateServerPanel(null_event); - } - if (show_serversettings) { - ToggleServerSettingsPanel(null_event); - } - if (show_portsettings) { - TogglePortSettingsPanel(null_event); - } - if (show_logoptions) { - ToggleLogOptionsPanel(null_event); - } + CSBPanel *logoptions = new CSBPanel( + sidebar, -1, _("Log options"), wxT("SideBar_LoggingOptions") + ); + wxPanel *logoptions_cnt = new wxPanel(logoptions, -1); + Server_LogOptionsPanel(logoptions_cnt); + logoptions->SetContent(logoptions_cnt); + sbmain->Add(logoptions, 0, wxGROW|wxALL|wxADJUST_MINSIZE, 0); /** * Bitmap button between sidebar and splitter @@ -273,7 +237,7 @@ wxDefaultPosition, wxSize(10,100) ); mainsizer->Add(toggler, 0, wxALIGN_CENTER, 5 ); - + /* Read splitter positions from configuration object. */ m_config->Read(wxT("/ServerWnd/Horizontal_Splitter"), &horizontal_splitter_pos, 400); @@ -309,116 +273,10 @@ } /** - * These 4 methods toggle the displayment of sidebar panels by determining - * wether its shown or not by call to IsShown(), and then either removing - * it from sizer and hiding it, or attaching it to sizer and showing it. - * Layout() is needed to recalculate item positions, and Refresh() to - * avoid strange GUI bugs. - */ -void CServerWnd::ToggleAddServerPanel(wxCommandEvent &event) { - wxString addserver; - - addserver = _("Add a server"); - - if (addserverpanel->IsShown()) { - sizer_addserver->Remove(addserverpanel); - addserverpanel->Hide(); - GetBtnToggleAddServer()->SetLabel(addserver+wxT(" >>")); - } else { - sizer_addserver->Add(addserverpanel, 0, wxGROW, 0); - addserverpanel->Show(); - GetBtnToggleAddServer()->SetLabel(addserver+wxT(" <<")); - } - - sidebar->Layout(); - sidebar->Refresh(); -} - -void CServerWnd::ToggleUpdateServerPanel(wxCommandEvent &event) { - wxString updateurl; - - updateurl = _("Update from URL"); - - if (updateserverpanel->IsShown()) { - sizer_updateserver->Remove(updateserverpanel); - updateserverpanel->Hide(); - GetBtnToggleUpdateServer()->SetLabel(updateurl+wxT(" >>")); - } else { - sizer_updateserver->Add(updateserverpanel, 0, wxGROW, 0); - updateserverpanel->Show(); - GetBtnToggleUpdateServer()->SetLabel(updateurl+wxT(" <<")); - } - - sidebar->Layout(); - sidebar->Refresh(); -} - -void CServerWnd::ToggleServerSettingsPanel(wxCommandEvent &event) { - wxString serversettings; - - serversettings = _("Server settings"); - - if (settingspanel->IsShown()) { - sizer_serversettings->Remove(settingspanel); - settingspanel->Hide(); - GetBtnToggleServerSettings()->SetLabel( - serversettings+wxT(" >>") - ); - } else { - sizer_serversettings->Add(settingspanel, 0, wxGROW, 0); - settingspanel->Show(); - GetBtnToggleServerSettings()->SetLabel( - serversettings+wxT(" <<") - ); - } - - sidebar->Layout(); - sidebar->Refresh(); -} - -void CServerWnd::TogglePortSettingsPanel(wxCommandEvent &event) { - wxString portsettings; - - portsettings = _("Port settings"); - - if (portsettingspanel->IsShown()) { - sizer_portsettings->Remove(portsettingspanel); - portsettingspanel->Hide(); - GetBtnTogglePortSettings()->SetLabel(portsettings+wxT(" >>")); - } else { - sizer_portsettings->Add(portsettingspanel, 0, wxGROW, 0); - portsettingspanel->Show(); - GetBtnTogglePortSettings()->SetLabel(portsettings+wxT(" <<")); - } - - sidebar->Layout(); - sidebar->Refresh(); -} - -void CServerWnd::ToggleLogOptionsPanel(wxCommandEvent &event) { - wxString loggingoptions; - - loggingoptions = _("Logging options"); - - if (logoptionspanel->IsShown()) { - sizer_logoptions->Remove(logoptionspanel); - logoptionspanel->Hide(); - GetBtnToggleLogOptions()->SetLabel(loggingoptions+wxT(" >>")); - } else { - sizer_logoptions->Add(logoptionspanel, 0, wxGROW, 0); - logoptionspanel->Show(); - GetBtnToggleLogOptions()->SetLabel(loggingoptions+wxT(" <<")); - } - - sidebar->Layout(); - sidebar->Refresh(); -} - -/** * Toggles the displayment of sidebar. * This code part requires a patched version of wxWindows that has - * wxFlexGridSizer::RemoveGrowableCol() method implemented (2.4.1 doesn't - * have it, and CVS doesn't have it either as of 2003/09/04). + * wxFlexGridSizer::RemoveGrowableCol() method implemented (only + wxWindows CVS HEAD has this implemented as of 2003-11-19). */ void CServerWnd::ToggleSidebar(wxCommandEvent &event) { #ifdef __HAVE_REMOVE_GROWABLE_COL__ @@ -431,7 +289,7 @@ GetBtnToggleSidebar()->SetBitmapSelected(img->rightarrow); GetBtnToggleSidebar()->SetBitmapFocus(img->rightarrow); } else { - mainsizer->Prepend(sidebar, 0, wxGROW|wxTOP|wxBOTTOM, 5); + mainsizer->Prepend(sidebar, 0, wxGROW|wxTOP|wxBOTTOM|wxADJUST_MINSIZE, 5); mainsizer->RemoveGrowableCol(1); mainsizer->AddGrowableCol(2); sidebar->Show(); Index: ServerWnd.h =================================================================== RCS file: /cvsroot/sharedaemon/ui-wx/src/ServerWnd.h,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- ServerWnd.h 17 Nov 2003 03:59:54 -0000 1.24 +++ ServerWnd.h 19 Nov 2003 23:22:07 -0000 1.25 @@ -36,6 +36,7 @@ #include "defines.h" #include "ServerListCtrl.h" #include "xMuleDlg.h" +#include "SBPanel.h" /* * CServerWnd class. @@ -63,11 +64,6 @@ DECLARE_EVENT_TABLE() /* Member event handlers */ void ToggleSidebar(wxCommandEvent &event); - void ToggleAddServerPanel(wxCommandEvent &event); - void ToggleUpdateServerPanel(wxCommandEvent &event); - void ToggleServerSettingsPanel(wxCommandEvent &event); - void TogglePortSettingsPanel(wxCommandEvent &event); - void ToggleLogOptionsPanel(wxCommandEvent &event); /* Member function declarations */ void AddNewServer(); @@ -79,9 +75,6 @@ /* Sidebar and its panels */ wxPanel *sidebar; - wxPanel *addserverpanel, *updateserverpanel, - *settingspanel, *portsettingspanel, - *logoptionspanel; /* Splitter window and its panels */ wxPanel *top_panel, *bottom_panel; @@ -125,26 +118,11 @@ wxStaticBitmap* GetServerListImage() { return (wxStaticBitmap*) FindWindow(ID_SERVERS_IMAGE); } - wxStaticBitmap* GetSSBitmapProvider() { - return (wxStaticBitmap*) FindWindow(ID_SS_SERVER_IMG); - } - wxButton* GetBtnToggleAddServer() { - return (wxButton*) FindWindow(ID_BTN_SHOW_ADDSERVER); - } - wxButton* GetBtnToggleUpdateServer() { - return (wxButton*) FindWindow(ID_BTN_SHOW_UPDATELIST); - } - wxButton* GetBtnToggleServerSettings() { - return (wxButton*) FindWindow(ID_BTN_SHOW_SERVERSETTINGS); - } - wxButton* GetBtnTogglePortSettings() { - return (wxButton*) FindWindow(ID_BTN_SHOW_PORT_OPTIONS); - } - wxButton* GetBtnToggleLogOptions() { - return (wxButton*) FindWindow(ID_BTN_SHOW_LOGGINGOPTIONS); - } wxBitmapButton* GetBtnToggleSidebar() { return (wxBitmapButton*) FindWindow(ID_BTN_TOGGLE_SIDEBAR); + } + wxStaticBitmap* GetSSBitmapProvider() { + return (wxStaticBitmap*) FindWindow(ID_SS_SERVER_IMG); } wxStaticText* GetSSServerName() { return (wxStaticText*) FindWindow(ID_SS_SERVER_NAME); Index: xMuleGUI_wdr.cpp =================================================================== RCS file: /cvsroot/sharedaemon/ui-wx/src/xMuleGUI_wdr.cpp,v retrieving revision 1.105 retrieving revision 1.106 diff -u -d -r1.105 -r1.106 --- xMuleGUI_wdr.cpp 17 Nov 2003 22:32:13 -0000 1.105 +++ xMuleGUI_wdr.cpp 19 Nov 2003 23:22:07 -0000 1.106 @@ -1064,7 +1064,7 @@ wxButton *item6 = new wxButton( parent, ID_ADDTOLIST, _("Add to List"), wxDefaultPosition, wxDefaultSize, 0 ); item6->SetToolTip( _("Add the server to list") ); - item0->Add( item6, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 ); + item0->Add( item6, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 ); if (set_sizer) { @@ -1089,7 +1089,7 @@ item0->Add( item1, 0, wxGROW, 5 ); wxButton *item2 = new wxButton( parent, ID_UPDATE, _("Update"), wxDefaultPosition, wxDefaultSize, 0 ); - item0->Add( item2, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT|wxBOTTOM, 5 ); + item0->Add( item2, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT|wxTOP, 5 ); if (set_sizer) { @@ -1157,7 +1157,7 @@ }; wxChoice *item13 = new wxChoice( parent, ID_SS_PRIO, wxDefaultPosition, wxSize(80,-1), 3, strs13, 0 ); item13->SetToolTip( _("Change server priority") ); - item11->Add( item13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxBOTTOM, 5 ); + item11->Add( item13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); item8->Add( item11, 0, wxALIGN_CENTER, 5 ); Index: xMuleGUI.wdr =================================================================== RCS file: /cvsroot/sharedaemon/ui-wx/src/xMuleGUI.wdr,v retrieving revision 1.103 retrieving revision 1.104 diff -u -d -r1.103 -r1.104 Binary files /tmp/cvsQjrRGi and /tmp/cvsygBujt differ |