Re: Enabling SQL text field in the SQL tab of object dialog - Mailing list pgadmin-hackers
From | Guillaume Lelarge |
---|---|
Subject | Re: Enabling SQL text field in the SQL tab of object dialog |
Date | |
Msg-id | 486A0C66.1040906@lelarge.info Whole thread Raw |
In response to | Re: Enabling SQL text field in the SQL tab of object dialog (Guillaume Lelarge <guillaume@lelarge.info>) |
Responses |
Re: Enabling SQL text field in the SQL tab of object dialog
|
List | pgadmin-hackers |
Guillaume Lelarge a écrit : > Dave Page a écrit : >> On Fri, Jun 20, 2008 at 12:48 AM, Guillaume Lelarge >> <guillaume@lelarge.info> wrote: >>> Done. I thought we didn't hide UI objects, only disable them, to get >>> a more >>> consistant UI. >> >> On a single dialogue we disable objects so that dialogue will always >> have the same layout no matter what server you're connected to. The >> design from dialogue to dialogue may change as appropriate however. >> >>> The button text doesn't please me. Neither do the message box text. >>> If one >>> has a better idea, I'll be glad to know about it. >> >> How about 'Lock DDL' for the checkbox? The message box could be >> something like: >> >> Locking the DDL will replace it with generated SQL. Are your sure you >> wish to lose the changes you have made? >> >> I can't help thinking that 'Lock DDL' is unnecessarily obscure though. >> Maybe 'Read only' is better. >> > > I like "Lock DDL". Perhaps "Read only DDL" would please you more ? > >> In anycase, there are still some sizing issues to resolve - see the >> attach screenshots for examples. >> > > It is great on GTK. I really should get a windows build system... and a > Mac Mini :) > I'm at the PostgreSQL booth, for the RMLL in Mont-de-Marsan (http://rmll.info). I'm trying the wifi system :) Here is the patch that fixes your issue on Win32. Works great on Win32 and Linux... I'm not sure for Mac OS X though. -- Guillaume. http://www.postgresqlfr.org http://dalibo.com Index: pgadmin/include/dlg/dlgProperty.h =================================================================== --- pgadmin/include/dlg/dlgProperty.h (revision 7386) +++ pgadmin/include/dlg/dlgProperty.h (working copy) @@ -60,6 +60,8 @@ void EnableOK(bool enable); virtual bool IsUpToDate() { return true; }; void ShowObject(); + + void FillSQLTextfield(); void CheckValid(bool &enable, const bool condition, const wxString &msg); static dlgProperty *CreateDlg(frmMain *frame, pgObject *node, bool asNew, pgaFactory *factory=0); @@ -86,6 +88,7 @@ void OnChange(wxCommandEvent &ev); void OnChangeOwner(wxCommandEvent &ev); void OnChangeStc(wxStyledTextEvent& event); + void OnChangeReadOnly(wxCommandEvent& event); protected: void AddUsers(ctlComboBoxFix *cb1, ctlComboBoxFix *cb2=0); @@ -97,7 +100,7 @@ pgDatabase *database; frmMain *mainForm; - ctlSQLBox *sqlPane; + wxPanel *sqlPane; wxTextValidator numericValidator; @@ -105,6 +108,10 @@ wxTextCtrl *txtName, *txtOid, *txtComment; ctlComboBox *cbOwner; ctlComboBox *cbClusterSet; + wxCheckBox *chkReadOnly; + ctlSQLBox *sqlTextField1; + ctlSQLBox *sqlTextField2; + bool enableSQL2; int width, height; wxTreeItemId item, owneritem; Index: pgadmin/dlg/dlgProperty.cpp =================================================================== --- pgadmin/dlg/dlgProperty.cpp (revision 7386) +++ pgadmin/dlg/dlgProperty.cpp (working copy) @@ -59,8 +59,6 @@ #include "schema/pgUser.h" - - class replClientData : public wxClientData { public: @@ -72,6 +70,9 @@ }; +#define CTRLID_CHKSQLTEXTFIELD 1000 + + BEGIN_EVENT_TABLE(dlgProperty, DialogWithHelp) EVT_NOTEBOOK_PAGE_CHANGED(XRCID("nbNotebook"), dlgProperty::OnPageSelect) @@ -80,6 +81,8 @@ EVT_COMBOBOX(XRCID("cbOwner"), dlgProperty::OnChange) EVT_TEXT(XRCID("txtComment"), dlgProperty::OnChange) + EVT_CHECKBOX(CTRLID_CHKSQLTEXTFIELD, dlgProperty::OnChangeReadOnly) + EVT_BUTTON(wxID_HELP, dlgProperty::OnHelp) EVT_BUTTON(wxID_OK, dlgProperty::OnOK) EVT_BUTTON(wxID_APPLY, dlgProperty::OnApply) @@ -90,6 +93,8 @@ { readOnly=false; sqlPane=0; + sqlTextField1=0; + sqlTextField2=0; processing=false; mainForm=frame; database=0; @@ -117,6 +122,11 @@ txtComment = CTRL_TEXT("txtComment"); cbOwner = CTRL_COMBOBOX2("cbOwner"); cbClusterSet = CTRL_COMBOBOX2("cbClusterSet"); + + wxString db = wxT("Database"); + wxString ts = wxT("Tablespace"); + enableSQL2 = db.Cmp(factory->GetTypeName()) == 0 + || ts.Cmp(factory->GetTypeName()) == 0; wxNotebookPage *page=nbNotebook->GetPage(0); wxASSERT(page != NULL); @@ -311,7 +321,46 @@ void dlgProperty::CreateAdditionalPages() { - sqlPane = new ctlSQLBox(nbNotebook, CTL_PROPSQL, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxSUNKEN_BORDER| wxTE_READONLY | wxTE_RICH2); + int width, height; + + // get a few sizes and widths + nbNotebook->GetClientSize(&width, &height); + height -= ConvertDialogToPixels(wxPoint(0, 20)).y; // sizes of tabs + wxPoint zeroPos=ConvertDialogToPixels(wxPoint(5, 5)); + wxSize chkSize=ConvertDialogToPixels(wxSize(65,12)); + + // add a panel + sqlPane = new wxPanel(nbNotebook); + + // add checkbox to the panel + chkReadOnly = new wxCheckBox(sqlPane, CTRLID_CHKSQLTEXTFIELD, wxT("Read only"), + wxPoint(zeroPos.x, zeroPos.y), + chkSize); + chkReadOnly->SetValue(true); + + // add ctlSQLBoxes to the panel + + if (enableSQL2) + { + sqlTextField1 = new ctlSQLBox(sqlPane, CTL_PROPSQL, + wxPoint(zeroPos.x, zeroPos.y + chkSize.GetHeight()), + wxSize(width - 3 * zeroPos.x, (height - 3 * zeroPos.y) / 2), + wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_RICH2); + + sqlTextField2 = new ctlSQLBox(sqlPane, CTL_PROPSQL, + wxPoint(zeroPos.x, zeroPos.y + chkSize.GetHeight() + (height - 3 * zeroPos.y) / 2), + wxSize(width - 3 * zeroPos.x, (height - 3 * zeroPos.y) / 2), + wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_RICH2); + } + else + { + sqlTextField1 = new ctlSQLBox(sqlPane, CTL_PROPSQL, + wxPoint(zeroPos.x, zeroPos.y + chkSize.GetHeight()), + wxSize(width - 3 * zeroPos.x, (height - 3 * zeroPos.y)), + wxTE_MULTILINE | wxSUNKEN_BORDER | wxTE_RICH2); + } + + // add panel to the notebook nbNotebook->AddPage(sqlPane, wxT("SQL")); } @@ -506,6 +555,78 @@ } +void dlgProperty::OnChangeReadOnly(wxCommandEvent &ev) +{ + size_t pos; + + if (sqlTextField1->GetText().Cmp(GetSql()) != 0 || + (enableSQL2 && sqlTextField2->GetText().Cmp(GetSql2()) != 0)) + { + if (wxMessageBox(_("Are you sure you wish to cancel your edit?"), _("SQL editor"), wxYES_NO) == wxNO) + { + chkReadOnly->SetValue(false); + return; + } + } + + sqlTextField1->SetReadOnly(chkReadOnly->GetValue()); + if (enableSQL2) + { + sqlTextField2->SetReadOnly(chkReadOnly->GetValue()); + } + for (pos = 0; pos < nbNotebook->GetPageCount() - 1; pos++) + { + nbNotebook->GetPage(pos)->Enable(chkReadOnly->GetValue()); + } + + if (chkReadOnly->GetValue()) + { + FillSQLTextfield(); + } +} + + +void dlgProperty::FillSQLTextfield() +{ + // create a function because this is a duplicated code + sqlTextField1->SetReadOnly(false); + if (enableSQL2) + { + sqlTextField2->SetReadOnly(false); + } + if (btnOK->IsEnabled()) + { + wxString tmp; + if (cbClusterSet && cbClusterSet->GetSelection() > 0) + { + replClientData *data=(replClientData*)cbClusterSet->GetClientData(cbClusterSet->GetSelection()); + tmp.Printf(_("-- Execute replicated using cluster \"%s\", set %ld\n"), data->cluster.c_str(), data->setId); + } + sqlTextField1->SetText(tmp + GetSql()); + if (enableSQL2) + { + sqlTextField2->SetText(GetSql2()); + } + } + else + { + if (GetObject()) + sqlTextField1->SetText(_("-- nothing to change")); + else + sqlTextField1->SetText(_("-- definition incomplete")); + if (enableSQL2) + { + sqlTextField2->SetText(wxT("")); + } + } + sqlTextField1->SetReadOnly(true); + if (enableSQL2) + { + sqlTextField2->SetReadOnly(true); + } +} + + bool dlgProperty::tryUpdate(wxTreeItemId collectionItem) { ctlTree *browser=mainForm->GetBrowser(); @@ -608,7 +729,7 @@ mainForm->GetSqlPane()->SetReadOnly(true); } } - else if (item) + else if (item && chkReadOnly->GetValue()) { wxTreeItemId collectionItem=item; @@ -753,8 +874,25 @@ return; } - wxString sql=GetSql(); - wxString sql2=GetSql2(); + wxString sql; + wxString sql2; + if (chkReadOnly->GetValue()) + { + sql = GetSql(); + sql2 = GetSql2(); + } + else + { + sql = sqlTextField1->GetText(); + if (enableSQL2) + { + sql2 = sqlTextField2->GetText(); + } + else + { + sql2 = wxT(""); + } + } if (!apply(sql, sql2)) { @@ -768,27 +906,10 @@ void dlgProperty::OnPageSelect(wxNotebookEvent& event) { - if (sqlPane && event.GetSelection() == (int)nbNotebook->GetPageCount()-1) + if (sqlTextField1 && chkReadOnly->GetValue() && + event.GetSelection() == (int)nbNotebook->GetPageCount()-1) { - sqlPane->SetReadOnly(false); - if (btnOK->IsEnabled()) - { - wxString tmp; - if (cbClusterSet && cbClusterSet->GetSelection() > 0) - { - replClientData *data=(replClientData*)cbClusterSet->GetClientData(cbClusterSet->GetSelection()); - tmp.Printf(_("-- Execute replicated using cluster \"%s\", set %ld\n"), data->cluster.c_str(), data->setId); - } - sqlPane->SetText(tmp + GetSql() + GetSql2()); - } - else - { - if (GetObject()) - sqlPane->SetText(_("-- nothing to change")); - else - sqlPane->SetText(_("-- definition incomplete")); - } - sqlPane->SetReadOnly(true); + FillSQLTextfield(); } }
pgadmin-hackers by date: