Guillaume Lelarge a écrit :
Dave Page a écrit :
On Fri, Jun 20, 2008 at 12:48 AM, Guillaume Lelarge
<[EMAIL PROTECTED]> 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();
}
}
--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers