Andreas Pflug wrote:
> First of all, this is certainly hackers stuff, please post on
> pgadmin-hackers!
Agreed. This is a repost/rewrite of the patch I have posted to the
pgadmin-support list a few days ago.
Dave Page wrote:
> That breaks the principle of least surprise because it introduces
> inconsistent behaviour.
>
> Perhaps a better approach would be to open the data view only if
> 'double-click-for-properties' is turned off?
Andreas Pflug wrote:
> - the default action might differ from user to user. For sure, an
> unconditional "View Data" on a table is a bad idea. I already hear
> those guys yelling double clicking on a 100 million row table...
This version of the patch tries to address those issues in the following
ways:
1. There is an additional checkbox in the Preferences tab of the Options
dialog, labeled "Show data instead of properties for tables and views",
placed as a subordinate of "Show object properties on double click" (I
have stripped the "in treeview" part, since double click should also
work in the Properties pane). The checkbox is disabled if its superior
is disabled.
2. In the same tab, a parameter labeled "Maximum rows in data view" is
introduced. It is used to limit the number of rows retrieved when
constructing the data view/edit grid if greater than zero. The default
value is set to 500, although it could be set to 0 (unlimited) to keep
the behavior prior to its introduction.
The patch also arranges reading and writing of the new parameters from
and to the configuration file.
The patch is against the beta1 source tree; I could re-sync it to the
latest snapshot if needed.
i.
--- src/include/frmMain.h.old Tue Aug 10 22:51:45 2004
+++ src/include/frmMain.h Wed Sep 15 11:56:51 2004
@@ -110,6 +110,7 @@
void OnPageChange(wxNotebookEvent& event);
void OnPropSelChanged(wxListEvent& event);
+ void OnPropSelActivated(wxListEvent& event);
void OnTreeSelChanged(wxTreeEvent &event);
void OnTreeKeyDown(wxTreeEvent& event);
void OnConnect(wxCommandEvent &ev);
--- src/include/sysSettings.h.old Mon Aug 9 09:59:20 2004
+++ src/include/sysSettings.h Wed Sep 22 11:51:58 2004
@@ -53,6 +53,8 @@
void SetLastSSL(const int newval);
long GetMaxRows() const { return maxRows; }
void SetMaxRows(const long l) { maxRows=l; }
+ long GetMaxViewRows() const { return maxViewRows; }
+ void SetMaxViewRows(const long l) { maxViewRows=l; }
long GetMaxColSize() const { return maxColSize; }
void SetMaxColSize(const long l) { maxColSize=l; }
bool GetAskSaveConfirmation() const { return askSaveConfirmation; }
@@ -89,6 +91,10 @@
bool GetDoubleClickProperties() const { return doubleClickProperties; }
void SetDoubleClickProperties(const bool newval);
+ // View instead of Properties
+ bool GetDoubleClickView() const { return doubleClickView; }
+ void SetDoubleClickView(const bool newval);
+
// maximum size of server log to read
long GetMaxServerLogSize() const { return maxServerLogSize; }
void SetMaxServerLogSize(long l) { maxServerLogSize = l; }
@@ -172,9 +178,9 @@
bool showUsersForPrivileges;
bool askSaveConfirmation;
bool confirmDelete;
- long maxRows, maxColSize, autoRowCountThreshold;
+ long maxRows, maxColSize, autoRowCountThreshold, maxViewRows;
bool stickySql, unicodeFile;
- bool doubleClickProperties;
+ bool doubleClickProperties, doubleClickView;
long maxServerLogSize;
wxString searchPath;
--- src/include/frmOptions.h.old Fri Jun 11 20:17:52 2004
+++ src/include/frmOptions.h Wed Sep 22 12:30:59 2004
@@ -37,6 +37,7 @@
void OnOK(wxCommandEvent &ev);
void OnCancel(wxCommandEvent &ev);
void OnHelp(wxCommandEvent &ev);
+ void OnDoubleClickProps(wxCommandEvent &ev);
DECLARE_EVENT_TABLE()
};
--- src/ui/common/frmOptions.xrc.old Tue Sep 7 10:38:13 2004
+++ src/ui/common/frmOptions.xrc Wed Sep 22 12:03:26 2004
@@ -58,33 +58,49 @@
</object>
<object class="wxCheckBox" name="chkUnicodeFile">
<label>Read and write Unicode UTF-8 files</label>
- <pos>5,35d</pos>
+ <pos>5,25d</pos>
<size>226,12d</size>
</object>
<object class="wxCheckBox" name="chkAskSaveConfirm">
<label>Do not prompt for unsaved files on exit</label>
<checked>0</checked>
- <pos>5,47d</pos>
+ <pos>5,37d</pos>
<size>226,12d</size>
</object>
<object class="wxCheckBox" name="chkAskDelete">
<label>Confirm object deletion?</label>
<checked>1</checked>
- <pos>5,59d</pos>
+ <pos>5,49d</pos>
<size>226,12d</size>
</object>
<object class="wxCheckBox" name="chkShowUsersForPrivileges">
<label>Show users for privileges?</label>
<checked>0</checked>
- <pos>5,71d</pos>
+ <pos>5,61d</pos>
<size>226,12d</size>
</object>
<object class="wxCheckBox" name="chkDoubleClickProperties">
- <label>Show object properties on double click in treeview?</label>
+ <label>Show object properties on double click?</label>
+ <checked>0</checked>
+ <pos>5,73d</pos>
+ <size>226,12d</size>
+ </object>
+ <object class="wxCheckBox" name="chkDoubleClickView">
+ <label>Show data instead of properties for tables and views?</label>
<checked>0</checked>
- <pos>5,83d</pos>
+ <pos>15,85d</pos>
<size>226,12d</size>
</object>
+ <object class="wxStaticText" name="lblMaxViewRows">
+ <label>Maximum rows in data view</label>
+ <pos>5,100d</pos>
+ </object>
+ <object class="wxTextCtrl" name="txtMaxViewRows">
+ <value>500</value>
+ <pos>175,98d</pos>
+ <size>35,-1d</size>
+ <tooltip>Maximums rows to retrieve into data view grid; 0 = unlimited</tooltip>
+ </object>
</object>
</object>
<object class="notebookpage">
@@ -199,4 +215,4 @@
<tooltip>Cancel any changes and close the dialogue.</tooltip>
</object>
</object>
-</resource>
\ No newline at end of file
+</resource>
--- src/ui/events.cpp.old Tue Sep 7 10:34:34 2004
+++ src/ui/events.cpp Wed Sep 22 12:57:28 2004
@@ -122,6 +122,7 @@
EVT_MENU(MNU_CONTEXTMENU, frmMain::OnContextMenu)
EVT_NOTEBOOK_PAGE_CHANGED(CTL_NOTEBOOK, frmMain::OnPageChange)
EVT_LIST_ITEM_SELECTED(CTL_PROPVIEW, frmMain::OnPropSelChanged)
+ EVT_LIST_ITEM_ACTIVATED(CTL_PROPVIEW, frmMain::OnPropSelActivated)
EVT_TREE_SEL_CHANGED(CTL_BROWSER, frmMain::OnTreeSelChanged)
EVT_TREE_ITEM_EXPANDING(CTL_BROWSER, frmMain::OnExpand)
EVT_TREE_ITEM_COLLAPSING(CTL_BROWSER, frmMain::OnCollapse)
@@ -684,6 +685,30 @@
}
+void frmMain::OnPropSelActivated(wxListEvent& event)
+{
+ wxTreeItemId item=browser->GetSelection();
+ pgObject *data=(pgObject*)browser->GetItemData(item);
+ wxCommandEvent nullEvent;
+
+ if (!settings->GetDoubleClickProperties())
+ return;
+ if (data && data->IsCollection())
+ {
+ data=((pgCollection*)data)->FindChild(browser, event.GetIndex());
+ if (data)
+ {
+ int type = data->GetType();
+ if (settings->GetDoubleClickView() && (type == PG_TABLE || type == PG_VIEW))
+ ViewData(false);
+ else if (data->CanEdit())
+ if (!dlgProperty::EditObjectDialog(this, sqlPane, data))
+ checkAlive();
+ }
+ }
+}
+
+
void frmMain::OnTreeSelChanged(wxTreeEvent& event)
{
denyCollapseItem=wxTreeItemId();
@@ -958,13 +983,22 @@
}
break;
+ case PG_TABLE:
+ case PG_VIEW:
+ if (settings->GetDoubleClickProperties() && settings->GetDoubleClickView()) {
+ denyCollapseItem=item;
+ ViewData(false);
+ return;
+ }
+ /* FALL-THROUGH */
+
default:
if (settings->GetDoubleClickProperties())
{
if (data->CanEdit())
{
+ denyCollapseItem=item;
OnProperties(nullEvent);
- event.Skip();
return;
}
}
--- src/ui/frmEditGrid.cpp.old Tue Sep 7 15:44:56 2004
+++ src/ui/frmEditGrid.cpp Wed Sep 22 13:03:10 2004
@@ -599,6 +599,11 @@
{
qry += wxT(" ORDER BY ") + orderBy;
}
+ long maxViewRows = settings->GetMaxViewRows();
+ if (maxViewRows > 0)
+ {
+ qry += wxT(" LIMIT ") + NumToStr(maxViewRows);
+ }
thread=new pgQueryThread(connection, qry);
if (thread->Create() != wxTHREAD_NO_ERROR)
--- src/ui/frmOptions.cpp.old Tue Sep 7 10:38:12 2004
+++ src/ui/frmOptions.cpp Wed Sep 22 12:32:32 2004
@@ -38,6 +38,7 @@
#define txtLogfile CTRL_TEXT("txtLogfile")
#define radLoglevel CTRL_RADIOBOX("radLoglevel")
#define txtMaxRows CTRL_TEXT("txtMaxRows")
+#define txtMaxViewRows CTRL_TEXT("txtMaxViewRows")
#define txtMaxColSize CTRL_TEXT("txtMaxColSize")
#define txtFont CTRL_TEXT("txtFont")
#define chkUnicodeFile CTRL_CHECKBOX("chkUnicodeFile")
@@ -47,6 +48,7 @@
#define txtAutoRowCount CTRL_TEXT("txtAutoRowCount")
#define chkStickySql CTRL_CHECKBOX("chkStickySql")
#define chkDoubleClickProperties CTRL_CHECKBOX("chkDoubleClickProperties")
+#define chkDoubleClickView CTRL_CHECKBOX("chkDoubleClickView")
#define cbLanguage CTRL_COMBOBOX("cbLanguage")
#define txtSqlFont CTRL_TEXT("txtSqlFont")
@@ -59,6 +61,8 @@
EVT_BUTTON (XRCID("btnOK"), frmOptions::OnOK)
EVT_BUTTON (XRCID("btnHelp"), frmOptions::OnHelp)
EVT_BUTTON (XRCID("btnCancel"), frmOptions::OnCancel)
+ EVT_CHECKBOX
+ (XRCID("chkDoubleClickProperties"), frmOptions::OnDoubleClickProps)
END_EVENT_TABLE()
frmOptions::frmOptions(frmMain *parent)
@@ -82,12 +86,14 @@
wxTextValidator numval(wxFILTER_NUMERIC);
txtMaxRows->SetValidator(numval);
+ txtMaxViewRows->SetValidator(numval);
txtMaxColSize->SetValidator(numval);
txtAutoRowCount->SetValidator(numval);
txtLogfile->SetValue(settings->GetLogFile());
radLoglevel->SetSelection(settings->GetLogLevel());
txtMaxRows->SetValue(NumToStr(settings->GetMaxRows()));
+ txtMaxViewRows->SetValue(NumToStr(settings->GetMaxViewRows()));
txtMaxColSize->SetValue(NumToStr(settings->GetMaxColSize()));
chkAskSaveConfirm->SetValue(!settings->GetAskSaveConfirmation());
chkAskDelete->SetValue(settings->GetConfirmDelete());
@@ -95,6 +101,8 @@
txtAutoRowCount->SetValue(NumToStr(settings->GetAutoRowCountThreshold()));
chkStickySql->SetValue(settings->GetStickySql());
chkDoubleClickProperties->SetValue(settings->GetDoubleClickProperties());
+ chkDoubleClickView->SetValue(settings->GetDoubleClickView());
+ chkDoubleClickView->Enable(settings->GetDoubleClickProperties());
txtSqlHelpSite->SetValue(settings->GetSqlHelpSite());
txtProxy->SetValue(settings->GetProxy());
chkUnicodeFile->SetValue(settings->GetUnicodeFile());
@@ -178,12 +186,15 @@
settings->SetMaxRows(StrToLong(txtMaxRows->GetValue()));
settings->SetMaxColSize(StrToLong(txtMaxColSize->GetValue()));
+ // Preferences
settings->SetAskSaveConfirmation(!chkAskSaveConfirm->GetValue());
settings->SetConfirmDelete(chkAskDelete->GetValue());
settings->SetShowUsersForPrivileges(chkShowUsersForPrivileges->GetValue());
settings->SetAutoRowCountThreshold(StrToLong(txtAutoRowCount->GetValue()));
settings->SetStickySql(chkStickySql->GetValue());
settings->SetDoubleClickProperties(chkDoubleClickProperties->GetValue());
+ settings->SetDoubleClickView(chkDoubleClickView->GetValue());
+ settings->SetMaxViewRows(StrToLong(txtMaxViewRows->GetValue()));
settings->SetUnicodeFile(chkUnicodeFile->GetValue());
settings->SetFont(currentFont);
settings->SetSQLFont(currentSqlFont);
@@ -276,3 +287,8 @@
if (logFile.ShowModal() == wxID_OK)
txtLogfile->SetValue(logFile.GetPath());
}
+
+void frmOptions::OnDoubleClickProps(wxCommandEvent &ev)
+{
+ chkDoubleClickView->Enable(chkDoubleClickProperties->IsChecked());
+}
--- src/utils/sysSettings.cpp.old Mon Aug 9 09:59:20 2004
+++ src/utils/sysSettings.cpp Wed Sep 22 13:11:28 2004
@@ -70,6 +70,8 @@
autoRowCountThreshold=Read(wxT("AutoRowCount"), 2000);
Read(wxT("StickySql"), &stickySql, false);
Read(wxT("DoubleClickProperties"), &doubleClickProperties, true);
+ Read(wxT("DoubleClickView"), &doubleClickView, false);
+ maxViewRows=Read(wxT("MaxViewRows"), 500L);
Read(wxT("WriteUnicodeFile"), &unicodeFile, false);
Read(wxT("SearchPath"), &searchPath, wxEmptyString);
Read(wxT("MaxServerLogSize"), &maxServerLogSize, 100000L);
@@ -147,6 +149,7 @@
Write(wxT("AskSaveConfirmation"), BoolToStr(askSaveConfirmation));
Write(wxT("ConfirmDelete"), BoolToStr(confirmDelete));
Write(wxT("ShowUsersForPrivileges"), BoolToStr(showUsersForPrivileges));
+ Write(wxT("MaxViewRows"), maxViewRows);
Write(wxT("SqlHelpSite"), sqlHelpSite);
Write(wxT("Proxy"), proxy);
Write(wxT("AutoRowCount"), autoRowCountThreshold);
@@ -328,3 +331,13 @@
doubleClickProperties = newval;
Write(wxT("DoubleClickProperties"), doubleClickProperties);
}
+
+//////////////////////////////////////////////////////////////////////////
+// View instead of properties
+//////////////////////////////////////////////////////////////////////////
+
+void sysSettings::SetDoubleClickView(const bool newval)
+{
+ doubleClickView = newval;
+ Write(wxT("DoubleClickView"), doubleClickView);
+}