Hi,

This patch removes the text and button controls to select a color with a 
wxColourPickerCtrl. It's a better component because it shows you the actual 
colour you choose with the colour chooser dialog. You'll find attached a 
screenshot that shows the Options window with the new widget. The dlgServer 
window is also updated.

Comments?


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com
diff --git a/pgadmin/dlg/dlgServer.cpp b/pgadmin/dlg/dlgServer.cpp
index 3d4212d..9ef2a14 100644
--- a/pgadmin/dlg/dlgServer.cpp
+++ b/pgadmin/dlg/dlgServer.cpp
@@ -14,15 +14,18 @@
 
 // App headers
 #include "pgAdmin3.h"
+
+// Must be after pgAdmin3.h or MSVC++ complains
+#include <wx/colordlg.h>
+#include <wx/clrpicker.h>
+
+// Other app headers
 #include "utils/misc.h"
 #include "frm/frmMain.h"
 #include "frm/frmHint.h"
 #include "dlg/dlgServer.h"
 #include "schema/pgDatabase.h"
 
-// Must be after pgAdmin3.h or MSVC++ complains
-#include <wx/colordlg.h>
-
 // pointer to controls
 #define txtDescription  CTRL_TEXT("txtDescription")
 #define txtService      CTRL_TEXT("txtService")
@@ -39,8 +42,7 @@
 #define stPassword      CTRL_STATIC("stPassword")
 #define txtPassword     CTRL_TEXT("txtPassword")
 #define txtDbRestriction CTRL_TEXT("txtDbRestriction")
-#define txtColour       CTRL_TEXT("txtColour")
-#define btnColor        CTRL_BUTTON("btnColor")
+#define colourPicker    CTRL_COLOURPICKER("colourPicker")
 
 
 BEGIN_EVENT_TABLE(dlgServer, dlgProperty)
@@ -56,8 +58,7 @@ BEGIN_EVENT_TABLE(dlgServer, dlgProperty)
     EVT_CHECKBOX(XRCID("chkStorePwd"),              dlgProperty::OnChange)
     EVT_CHECKBOX(XRCID("chkRestore"),               dlgProperty::OnChange)
     EVT_CHECKBOX(XRCID("chkTryConnect"),            dlgServer::OnChangeTryConnect)
-	EVT_TEXT(XRCID("txtColour"),                    dlgProperty::OnChange)
-    EVT_BUTTON(XRCID("btnColor"),                   dlgServer::OnChooseColor)
+    EVT_COLOURPICKER_CHANGED(XRCID("colourPicker"), dlgServer::OnChangeColour)
     EVT_BUTTON(wxID_OK,                             dlgServer::OnOK)
 END_EVENT_TABLE();
 
@@ -151,23 +152,9 @@ void dlgServer::OnOK(wxCommandEvent &ev)
         server->iSetStorePwd(chkStorePwd->GetValue());
         server->iSetRestore(chkRestore->GetValue());
         server->iSetDbRestriction(txtDbRestriction->GetValue().Trim());
-        if (txtColour->GetValue().Trim() == wxEmptyString)
-            server->iSetColour(wxEmptyString);
-        else
-        {
-            wxColour colour;
-            wxString sColour = wxEmptyString;
-
-            if (colour.Set(txtColour->GetValue().Trim()))
-                sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
-            else
-            {
-                wxLogError(_("The colour specified is not valid."));
-                return;
-            }
-
-            server->iSetColour(sColour);
-        }
+        wxColour colour = colourPicker->GetColour();
+        wxString sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+        server->iSetColour(sColour);
         mainForm->execSelChange(server->GetId(), true);
         mainForm->GetBrowser()->SetItemText(item, server->GetFullName());
 
@@ -184,6 +171,12 @@ void dlgServer::OnOK(wxCommandEvent &ev)
 }
 
 
+void dlgServer::OnChangeColour(wxColourPickerEvent &ev)
+{
+    dlgProperty::OnChange(ev);
+}
+
+
 void dlgServer::OnChangeRestr(wxCommandEvent &ev)
 {
     if (!connection || txtDbRestriction->GetValue().IsEmpty())
@@ -260,7 +253,7 @@ int dlgServer::Go(bool modal)
         chkStorePwd->SetValue(server->GetStorePwd());
         chkRestore->SetValue(server->GetRestore());
         txtDbRestriction->SetValue(server->GetDbRestriction());
-        txtColour->SetValue(server->GetColour());
+        colourPicker->SetColour(server->GetColour());
 
         stPassword->Disable();
         txtPassword->Disable();
@@ -318,16 +311,6 @@ void dlgServer::OnChangeTryConnect(wxCommandEvent &ev)
 }
 
 
-void dlgServer::OnChooseColor(wxCommandEvent &ev)
-{
-    wxColourDialog dlg( NULL );
-    if ( dlg.ShowModal() == wxID_OK )
-    {
-        txtColour->SetValue(dlg.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX));
-    }
-}
-
-
 void dlgServer::CheckChange()
 {
     wxString name=GetName();
@@ -335,12 +318,17 @@ void dlgServer::CheckChange()
 
     if (server)
     {
+        // Get old value
         wxColour colour;
         wxString sColour = wxEmptyString;
 
         if (colour.Set(server->GetColour()))
             sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
 
+        // Get new value
+        wxColour colour2 = colourPicker->GetColour();
+        wxString sColour2 = colour2.GetAsString(wxC2S_HTML_SYNTAX);
+
         enable =  name != server->GetName()
                || txtDescription->GetValue() != server->GetDescription()
                || txtService->GetValue() != server->GetServiceID()
@@ -351,7 +339,7 @@ void dlgServer::CheckChange()
                || chkStorePwd->GetValue() != server->GetStorePwd()
                || chkRestore->GetValue() != server->GetRestore()
                || txtDbRestriction->GetValue() != server->GetDbRestriction()
-               || txtColour->GetValue() != sColour;
+               || sColour != sColour2;
     }
 
 
diff --git a/pgadmin/frm/frmOptions.cpp b/pgadmin/frm/frmOptions.cpp
index 3c33df2..2eb6034 100644
--- a/pgadmin/frm/frmOptions.cpp
+++ b/pgadmin/frm/frmOptions.cpp
@@ -17,6 +17,7 @@
 #include <wx/fontdlg.h>
 #include <wx/fontutil.h>
 #include <wx/file.h>
+#include <wx/clrpicker.h>
 
 // App headers
 #include "frm/frmOptions.h"
@@ -68,35 +69,27 @@
 #define lstDisplay					CTRL_CHECKLISTBOX("lstDisplay")
 #define chkSystemObjects            CTRL_CHECKBOX("chkSystemObjects")
 #define chkIgnoreVersion            CTRL_CHECKBOX("chkIgnoreVersion")
-#define txtIdleProcessColour        CTRL_TEXT("txtIdleProcessColour")
-#define btnIdleProcessColour        CTRL_BUTTON("btnIdleProcessColour")
-#define txtActiveProcessColour      CTRL_TEXT("txtActiveProcessColour")
-#define btnActiveProcessColour      CTRL_BUTTON("btnActiveProcessColour")
-#define txtSlowProcessColour        CTRL_TEXT("txtSlowProcessColour")
-#define btnSlowProcessColour        CTRL_BUTTON("btnSlowProcessColour")
-#define txtBlockedProcessColour     CTRL_TEXT("txtBlockedProcessColour")
-#define btnBlockedProcessColour     CTRL_BUTTON("btnBlockedProcessColour")
+#define pickerIdleProcessColour     CTRL_COLOURPICKER("pickerIdleProcessColour")
+#define pickerActiveProcessColour   CTRL_COLOURPICKER("pickerActiveProcessColour")
+#define pickerSlowProcessColour     CTRL_COLOURPICKER("pickerSlowProcessColour")
+#define pickerBlockedProcessColour  CTRL_COLOURPICKER("pickerBlockedProcessColour")
 
 BEGIN_EVENT_TABLE(frmOptions, pgDialog)
-    EVT_MENU(MNU_HELP,                           frmOptions::OnHelp)
-    EVT_BUTTON (XRCID("btnFont"),                frmOptions::OnFontSelect)
-    EVT_BUTTON (XRCID("btnSqlFont"),             frmOptions::OnSqlFontSelect)
-    EVT_BUTTON (XRCID("btnBrowseLogfile"),       frmOptions::OnBrowseLogFile)
-    EVT_BUTTON (XRCID("btnSlonyPath"),           frmOptions::OnSlonyPathSelect)
-    EVT_BUTTON (XRCID("btnPostgresqlPath"),      frmOptions::OnPostgresqlPathSelect)
-    EVT_BUTTON (XRCID("btnEnterprisedbPath"),    frmOptions::OnEnterprisedbPathSelect)
-    EVT_BUTTON (XRCID("btnGPDBPath"),            frmOptions::OnGPDBPathSelect)
-    EVT_BUTTON (XRCID("btnDefault"),             frmOptions::OnDefault)
-    EVT_CHECKBOX(XRCID("chkSuppressHints"),      frmOptions::OnSuppressHints)
-    EVT_CHECKBOX(XRCID("chkResetHints"),         frmOptions::OnResetHints)
-    EVT_BUTTON (wxID_OK,                         frmOptions::OnOK)
-    EVT_BUTTON (wxID_HELP,                       frmOptions::OnHelp)
-    EVT_BUTTON (wxID_CANCEL,                     frmOptions::OnCancel)
-    EVT_COMBOBOX(XRCID("cbCopyQuote"),		     frmOptions::OnChangeCopyQuote)
-    EVT_BUTTON(XRCID("btnIdleProcessColour"),    frmOptions::OnChooseIdleProcessColour)
-    EVT_BUTTON(XRCID("btnActiveProcessColour"),  frmOptions::OnChooseActiveProcessColour)
-    EVT_BUTTON(XRCID("btnSlowProcessColour"),    frmOptions::OnChooseSlowProcessColour)
-    EVT_BUTTON(XRCID("btnBlockedProcessColour"), frmOptions::OnChooseBlockedProcessColour)
+    EVT_MENU(MNU_HELP,                                            frmOptions::OnHelp)
+    EVT_BUTTON (XRCID("btnFont"),                                 frmOptions::OnFontSelect)
+    EVT_BUTTON (XRCID("btnSqlFont"),                              frmOptions::OnSqlFontSelect)
+    EVT_BUTTON (XRCID("btnBrowseLogfile"),                        frmOptions::OnBrowseLogFile)
+    EVT_BUTTON (XRCID("btnSlonyPath"),                            frmOptions::OnSlonyPathSelect)
+    EVT_BUTTON (XRCID("btnPostgresqlPath"),                       frmOptions::OnPostgresqlPathSelect)
+    EVT_BUTTON (XRCID("btnEnterprisedbPath"),                     frmOptions::OnEnterprisedbPathSelect)
+    EVT_BUTTON (XRCID("btnGPDBPath"),                             frmOptions::OnGPDBPathSelect)
+    EVT_BUTTON (XRCID("btnDefault"),                              frmOptions::OnDefault)
+    EVT_CHECKBOX(XRCID("chkSuppressHints"),                       frmOptions::OnSuppressHints)
+    EVT_CHECKBOX(XRCID("chkResetHints"),                          frmOptions::OnResetHints)
+    EVT_BUTTON (wxID_OK,                                          frmOptions::OnOK)
+    EVT_BUTTON (wxID_HELP,                                        frmOptions::OnHelp)
+    EVT_BUTTON (wxID_CANCEL,                                      frmOptions::OnCancel)
+    EVT_COMBOBOX(XRCID("cbCopyQuote"),		                      frmOptions::OnChangeCopyQuote)
 END_EVENT_TABLE()
 
 
@@ -229,10 +222,10 @@ frmOptions::frmOptions(frmMain *parent)
     chkIgnoreVersion->SetValue(settings->GetIgnoreVersion());
 
     // Get back the colours
-    txtIdleProcessColour->SetValue(settings->GetIdleProcessColour());
-    txtActiveProcessColour->SetValue(settings->GetActiveProcessColour());
-    txtSlowProcessColour->SetValue(settings->GetSlowProcessColour());
-    txtBlockedProcessColour->SetValue(settings->GetBlockedProcessColour());
+    pickerIdleProcessColour->SetColour(settings->GetIdleProcessColour());
+    pickerActiveProcessColour->SetColour(settings->GetActiveProcessColour());
+    pickerSlowProcessColour->SetColour(settings->GetSlowProcessColour());
+    pickerBlockedProcessColour->SetColour(settings->GetBlockedProcessColour());
 
     cbLanguage->Append(_("Default"));
     int sel=0;
@@ -574,26 +567,32 @@ void frmOptions::OnOK(wxCommandEvent &ev)
     }
 
     // Change the status colours
-    if (txtIdleProcessColour->GetValue() != settings->GetIdleProcessColour())
-    {
+    wxColour colour;
+    wxString sColour;
+
+    colour = pickerIdleProcessColour->GetColour();
+    sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+    if (sColour != settings->GetIdleProcessColour())
         changed = true;
-        settings->SetIdleProcessColour(CheckColour(txtIdleProcessColour->GetValue().Trim()));
-    }
-    if (txtActiveProcessColour->GetValue() != settings->GetActiveProcessColour())
-    {
+    settings->SetIdleProcessColour(sColour);
+
+    colour = pickerActiveProcessColour->GetColour();
+    sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+    if (sColour != settings->GetActiveProcessColour())
         changed = true;
-        settings->SetActiveProcessColour(CheckColour(txtActiveProcessColour->GetValue().Trim()));
-    }
-    if (txtSlowProcessColour->GetValue() != settings->GetSlowProcessColour())
-    {
+    settings->SetActiveProcessColour(sColour);
+
+    colour = pickerSlowProcessColour->GetColour();
+    sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+    if (sColour != settings->GetSlowProcessColour())
         changed = true;
-        settings->SetSlowProcessColour(CheckColour(txtSlowProcessColour->GetValue().Trim()));
-    }
-    if (txtBlockedProcessColour->GetValue() != settings->GetBlockedProcessColour())
-    {
+    settings->SetSlowProcessColour(sColour);
+
+    colour = pickerBlockedProcessColour->GetColour();
+    sColour = colour.GetAsString(wxC2S_HTML_SYNTAX);
+    if (sColour != settings->GetBlockedProcessColour())
         changed = true;
-        settings->SetBlockedProcessColour(CheckColour(txtBlockedProcessColour->GetValue().Trim()));
-    }
+    settings->SetBlockedProcessColour(sColour);
 
     // Change the language last, as it will affect our tests for changes
     // in the display object types.
@@ -675,46 +674,6 @@ void frmOptions::OnBrowseLogFile(wxCommandEvent &ev)
 }
 
 
-void frmOptions::OnChooseIdleProcessColour(wxCommandEvent &ev)
-{
-    wxColourDialog dlg( NULL );
-    if ( dlg.ShowModal() == wxID_OK )
-    {
-        txtIdleProcessColour->SetValue(dlg.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX));
-    }
-}
-
-
-void frmOptions::OnChooseActiveProcessColour(wxCommandEvent &ev)
-{
-    wxColourDialog dlg( NULL );
-    if ( dlg.ShowModal() == wxID_OK )
-    {
-        txtActiveProcessColour->SetValue(dlg.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX));
-    }
-}
-
-
-void frmOptions::OnChooseSlowProcessColour(wxCommandEvent &ev)
-{
-    wxColourDialog dlg( NULL );
-    if ( dlg.ShowModal() == wxID_OK )
-    {
-        txtSlowProcessColour->SetValue(dlg.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX));
-    }
-}
-
-
-void frmOptions::OnChooseBlockedProcessColour(wxCommandEvent &ev)
-{
-    wxColourDialog dlg( NULL );
-    if ( dlg.ShowModal() == wxID_OK )
-    {
-        txtBlockedProcessColour->SetValue(dlg.GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX));
-    }
-}
-
-
 optionsFactory::optionsFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar) : actionFactory(list)
 {
     mnu->Append(id, _("&Options..."), _("Show options dialog."));
diff --git a/pgadmin/include/dlg/dlgServer.h b/pgadmin/include/dlg/dlgServer.h
index 872d373..460c5e3 100644
--- a/pgadmin/include/dlg/dlgServer.h
+++ b/pgadmin/include/dlg/dlgServer.h
@@ -14,6 +14,7 @@
 #define __DLG_SERVERPROP
 
 #include "dlg/dlgProperty.h"
+#include <wx/clrpicker.h>
 
 class pgServer;
 
@@ -42,7 +43,7 @@ private:
     void OnChangeRestr(wxCommandEvent &ev);
     void OnChangeTryConnect(wxCommandEvent &ev);
     void OnPageSelect(wxNotebookEvent &event);
-    void OnChooseColor(wxCommandEvent &ev);
+    void OnChangeColour(wxColourPickerEvent &ev);
 
     DECLARE_EVENT_TABLE()
 };
diff --git a/pgadmin/include/frm/frmOptions.h b/pgadmin/include/frm/frmOptions.h
index b210ab2..ccac9b3 100644
--- a/pgadmin/include/frm/frmOptions.h
+++ b/pgadmin/include/frm/frmOptions.h
@@ -48,10 +48,6 @@ private:
     void OnSuppressHints(wxCommandEvent &ev);
     void OnResetHints(wxCommandEvent &ev);
 	void OnChangeCopyQuote(wxCommandEvent &ev);
-    void OnChooseIdleProcessColour(wxCommandEvent&);
-    void OnChooseActiveProcessColour(wxCommandEvent&);
-    void OnChooseSlowProcessColour(wxCommandEvent&);
-    void OnChooseBlockedProcessColour(wxCommandEvent&);
     wxString CheckColour(wxString colour);
     DECLARE_EVENT_TABLE()
 };
diff --git a/pgadmin/include/utils/misc.h b/pgadmin/include/utils/misc.h
index 9f687fd..ccd98d8 100644
--- a/pgadmin/include/utils/misc.h
+++ b/pgadmin/include/utils/misc.h
@@ -86,6 +86,7 @@ extern sysSettings *settings;
 #define CTRL_CHECKLISTBOX(id)   (XRCCTRL(*this, id, wxCheckListBox))
 #define CTRL_DATEPICK(id)       (XRCCTRL(*this, id, wxDatePickerCtrl))
 #define CTRL_TREE(id)           (XRCCTRL(*this, id, ctlTree))
+#define CTRL_COLOURPICKER(id)   (XRCCTRL(*this, id, wxColourPickerCtrl))
 
 #endif // PGSCLI
 
diff --git a/pgadmin/ui/dlgServer.xrc b/pgadmin/ui/dlgServer.xrc
index 98c1641..9dbb14c 100644
--- a/pgadmin/ui/dlgServer.xrc
+++ b/pgadmin/ui/dlgServer.xrc
@@ -191,22 +191,7 @@
                   <border>4</border>
                 </object>
                 <object class="sizeritem">
-                  <object class="wxFlexGridSizer">
-                    <cols>2</cols>
-                    <growablecols>0</growablecols>
-                    <object class="sizeritem">
-                      <object class="wxTextCtrl" name="txtColour"/>
-                      <flag>wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
-                      <border>4</border>
-                    </object>
-                    <object class="sizeritem">
-                      <object class="wxButton" name="btnColor">
-                        <label>...</label>
-                      </object>
-                      <flag>wxALIGN_CENTRE_VERTICAL|wxTOP|wxLEFT|wxRIGHT</flag>
-                      <border>4</border>
-                    </object>
-                  </object>
+                  <object class="wxColourPickerCtrl" name="colourPicker"/>
                   <flag>wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxALL</flag>
                   <border>4</border>
                 </object>
@@ -258,4 +243,4 @@
       </object>
     </object>
   </object>
-</resource>
\ No newline at end of file
+</resource>
diff --git a/pgadmin/ui/frmOptions.xrc b/pgadmin/ui/frmOptions.xrc
index 6197890..317f6f0 100644
--- a/pgadmin/ui/frmOptions.xrc
+++ b/pgadmin/ui/frmOptions.xrc
@@ -327,54 +327,34 @@
             <label>Idle Process Colour</label>
             <pos>5,5d</pos>
           </object>
-          <object class="wxTextCtrl" name="txtIdleProcessColour">
+          <object class="wxColourPickerCtrl" name="pickerIdleProcessColour">
             <pos>100,5d</pos>
             <size>50,12d</size>
           </object>
-          <object class="wxButton" name="btnIdleProcessColour">
-            <label>...</label>
-            <pos>170,5d</pos>
-            <size>20,12d</size>
-          </object>
           <object class="wxStaticText" name="stActiveProcessColour">
             <label>Active Process Colour</label>
             <pos>5,22d</pos>
           </object>
-          <object class="wxTextCtrl" name="txtActiveProcessColour">
+          <object class="wxColourPickerCtrl" name="pickerActiveProcessColour">
             <pos>100,22d</pos>
             <size>50,12d</size>
           </object>
-          <object class="wxButton" name="btnActiveProcessColour">
-            <label>...</label>
-            <pos>170,22d</pos>
-            <size>20,12d</size>
-          </object>
           <object class="wxStaticText" name="stSlowProcessColour">
             <label>Slow Process Colour</label>
             <pos>5,39d</pos>
           </object>
-          <object class="wxTextCtrl" name="txtSlowProcessColour">
+          <object class="wxColourPickerCtrl" name="pickerSlowProcessColour">
             <pos>100,39d</pos>
             <size>50,12d</size>
           </object>
-          <object class="wxButton" name="btnSlowProcessColour">
-            <label>...</label>
-            <pos>170,39d</pos>
-            <size>20,12d</size>
-          </object>
           <object class="wxStaticText" name="stBlockedProcessColour">
             <label>Blocked Process Colour</label>
             <pos>5,56d</pos>
           </object>
-          <object class="wxTextCtrl" name="txtBlockedProcessColour">
+          <object class="wxColourPickerCtrl" name="pickerBlockedProcessColour">
             <pos>100,56d</pos>
             <size>50,12d</size>
           </object>
-          <object class="wxButton" name="btnBlockedProcessColour">
-            <label>...</label>
-            <pos>170,56d</pos>
-            <size>20,12d</size>
-          </object>
         </object>
       </object>
       <object class="notebookpage">

<<attachment: wxcolourpickerctrl.png>>

-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to