Le 12/04/2010 12:45, Dave Page a écrit : > On Sat, Apr 10, 2010 at 4:16 PM, Guillaume Lelarge > <guilla...@lelarge.info> wrote: >> I don't commit it right now. Dave, can you get a look at it? is the >> patch good to go? Thanks. > > Instead of maintaining a new array of frmQuery's, can you use the > existing frames array (see dlgClasses.c|h)? >
Sure. Took me all evening, but at least it's done now :) See patch attached. -- Guillaume. http://www.postgresqlfr.org http://dalibo.com
diff --git a/pgadmin/dlg/dlgClasses.cpp b/pgadmin/dlg/dlgClasses.cpp index 943a8a5..2ed3170 100644 --- a/pgadmin/dlg/dlgClasses.cpp +++ b/pgadmin/dlg/dlgClasses.cpp @@ -293,7 +293,7 @@ void pgFrame::OnRecent(wxCommandEvent& event) -void pgFrame::UpdateRecentFiles() +void pgFrame::UpdateRecentFiles(bool updatefile) { if (!recentFileMenu) return; @@ -314,7 +314,7 @@ void pgFrame::UpdateRecentFiles() while (i <= maxFiles) lastFiles[i++] = wxT(""); - if (recentIndex > 1 && !lastPath.IsNull()) + if (recentIndex > 1 && !lastPath.IsNull() && updatefile) { for (i=recentIndex ; i > 1 ; i--) lastFiles[i] = lastFiles[i-1]; @@ -332,7 +332,8 @@ void pgFrame::UpdateRecentFiles() for (i=1 ; i <= maxFiles ; i++) { - settings->Write(recentKey + wxString::Format(wxT("/%d"), i), lastFiles[i]); + if (updatefile) + settings->Write(recentKey + wxString::Format(wxT("/%d"), i), lastFiles[i]); if (!lastFiles[i].IsNull()) recentFileMenu->Append(MNU_RECENT+i, wxT("&") + wxString::Format(wxT("%d"), i) + wxT(" ") + lastFiles[i]); diff --git a/pgadmin/frm/events.cpp b/pgadmin/frm/events.cpp index a6089fc..f705333 100644 --- a/pgadmin/frm/events.cpp +++ b/pgadmin/frm/events.cpp @@ -142,6 +142,47 @@ void frmMain::OnClose(wxCloseEvent& event) } +void frmMain::UpdateAllRecentFiles() +{ + wxWindow *fr; + windowList::Node *node; + node = frames.GetFirst(); + while (node) + { + fr=node->GetData(); + ((frmQuery*)fr)->UpdateRecentFiles(false); + node = node->GetNext(); + } +} + + +void frmMain::UpdateAllFavouritesList() +{ + wxWindow *fr; + windowList::Node *node; + node = frames.GetFirst(); + while (node) + { + fr=node->GetData(); + ((frmQuery*)fr)->UpdateFavouritesList(); + node = node->GetNext(); + } +} + +void frmMain::UpdateAllMacrosList() +{ + wxWindow *fr; + windowList::Node *node; + node = frames.GetFirst(); + while (node) + { + fr=node->GetData(); + ((frmQuery*)fr)->UpdateMacrosList(); + node = node->GetNext(); + } +} + + void frmMain::OnAction(wxCommandEvent &ev) { actionFactory *af=menuFactories->GetFactory(ev.GetId()); diff --git a/pgadmin/frm/frmQuery.cpp b/pgadmin/frm/frmQuery.cpp index 1a460f3..23497b9 100644 --- a/pgadmin/frm/frmQuery.cpp +++ b/pgadmin/frm/frmQuery.cpp @@ -191,7 +191,8 @@ class DnDFile : public wxFileDropTarget m_fquery->SetChanged(false); m_fquery->setExtendedTitle(); m_fquery->SetLineEndingStyle(); - m_fquery->UpdateRecentFiles(); + m_fquery->UpdateRecentFiles(true); + m_fquery->UpdateAllRecentFiles(); } } return true; @@ -305,14 +306,14 @@ pgsTimer(new pgScriptTimer(this)) favouritesMenu->Append(MNU_FAVOURITES_ADD, _("Add favourite..."), _("Add current query to favourites")); favouritesMenu->Append(MNU_FAVOURITES_MANAGE, _("Manage favourites..."), _("Edit and delete favourites")); favouritesMenu->AppendSeparator(); - favourites = queryFavouriteFileProvider::LoadFavourites(true); + favourites = 0L; UpdateFavouritesList(); menuBar->Append(favouritesMenu, _("Fav&ourites")); macrosMenu = new wxMenu(); macrosMenu->Append(MNU_MACROS_MANAGE, _("Manage macros..."), _("Edit and delete macros")); macrosMenu->AppendSeparator(); - macros = queryMacroFileProvider::LoadMacros(true); + macros = 0L; UpdateMacrosList(); menuBar->Append(macrosMenu, _("&Macros")); @@ -1385,6 +1386,11 @@ void frmQuery::updateMenu(wxObject *obj) void frmQuery::UpdateFavouritesList() { + if (favourites) + delete favourites; + + favourites = queryFavouriteFileProvider::LoadFavourites(true); + while (favouritesMenu->GetMenuItemCount() > 3) { favouritesMenu->Destroy(favouritesMenu->GetMenuItems()[3]); @@ -1396,6 +1402,11 @@ void frmQuery::UpdateFavouritesList() void frmQuery::UpdateMacrosList() { + if (macros) + delete macros; + + macros = queryMacroFileProvider::LoadMacros(true); + while (macrosMenu->GetMenuItemCount() > 2) { macrosMenu->Destroy(macrosMenu->GetMenuItems()[2]); @@ -1413,7 +1424,7 @@ void frmQuery::OnAddFavourite(wxCommandEvent &event) { // Added a favourite, so save queryFavouriteFileProvider::SaveFavourites(favourites); - UpdateFavouritesList(); + mainForm->UpdateAllFavouritesList(); } } @@ -1425,14 +1436,11 @@ void frmQuery::OnManageFavourites(wxCommandEvent &event) { // Changed something, so save queryFavouriteFileProvider::SaveFavourites(favourites); - UpdateFavouritesList(); } - else if (r == -1) + if (r == 1 || r == -1) { // Changed something requiring rollback - delete favourites; - favourites = queryFavouriteFileProvider::LoadFavourites(true); - UpdateFavouritesList(); + mainForm->UpdateAllFavouritesList(); } } @@ -1593,11 +1601,17 @@ void frmQuery::OpenLastFile() changed = false; setExtendedTitle(); SetLineEndingStyle(); - UpdateRecentFiles(); + UpdateRecentFiles(true); + mainForm->UpdateAllRecentFiles(); } } +void frmQuery::UpdateAllRecentFiles() +{ + mainForm->UpdateAllRecentFiles(); +} + void frmQuery::OnNew(wxCommandEvent& event) { frmQuery *fq = new frmQuery(mainForm, wxEmptyString, conn->Duplicate(), wxEmptyString); @@ -2135,14 +2149,11 @@ void frmQuery::OnMacroManage(wxCommandEvent &event) { // Changed something, so save queryMacroFileProvider::SaveMacros(macros); - UpdateMacrosList(); } - else if (r == -1) + if (r == -1 || r == 1) { // Changed something requiring rollback - delete macros; - macros = queryMacroFileProvider::LoadMacros(true); - UpdateMacrosList(); + mainForm->UpdateAllMacrosList(); } } diff --git a/pgadmin/include/dlg/dlgClasses.h b/pgadmin/include/dlg/dlgClasses.h index 26f576e..c5c4d23 100644 --- a/pgadmin/include/dlg/dlgClasses.h +++ b/pgadmin/include/dlg/dlgClasses.h @@ -60,7 +60,7 @@ public: void SavePosition(); void OnAction(wxCommandEvent& event); - void UpdateRecentFiles(); + void UpdateRecentFiles(bool updatefile=true); menuFactoryList *GetMenuFactories() { return menuFactories; } diff --git a/pgadmin/include/frm/frmMain.h b/pgadmin/include/frm/frmMain.h index d9980a9..1e1ea01 100644 --- a/pgadmin/include/frm/frmMain.h +++ b/pgadmin/include/frm/frmMain.h @@ -21,6 +21,7 @@ // wxAUI #include <wx/aui/aui.h> +#include "frm/frmQuery.h" #include "dlg/dlgClasses.h" #include "utils/factory.h" @@ -116,6 +117,10 @@ public: wxString GetCurrentNodePath(); bool SetCurrentNode(wxTreeItemId node, const wxString &path); + void UpdateAllRecentFiles(); + void UpdateAllFavouritesList(); + void UpdateAllMacrosList(); + private: wxAuiManager manager; ctlTree *browser; diff --git a/pgadmin/include/frm/frmQuery.h b/pgadmin/include/frm/frmQuery.h index c94ad7e..c4371f5 100644 --- a/pgadmin/include/frm/frmQuery.h +++ b/pgadmin/include/frm/frmQuery.h @@ -82,6 +82,13 @@ public: void SetLastPath(wxString p_lastpath) { lastPath = p_lastpath; } bool CheckChanged(bool canVeto); + void UpdateFavouritesList(); + void UpdateMacrosList(); + + void UpdateAllRecentFiles(); + void UpdateAllFavouritesList(); + void UpdateAllMacrosList(); + private: frmMain *mainForm; wxAuiManager manager; @@ -200,13 +207,11 @@ private: void OnScriptComplete(wxCommandEvent &ev); void setTools(const bool running); void showMessage(const wxString& msg, const wxString &msgShort=wxT("")); - void UpdateFavouritesList(); int GetLineEndingStyle(); void OnSetEOLMode(wxCommandEvent& event); void SetEOLModeDisplay(int mode); void OnMacroInvoke(wxCommandEvent& event); void OnMacroManage(wxCommandEvent& event); - void UpdateMacrosList(); void LoadQueries(); void SaveQueries();
-- Sent via pgadmin-support mailing list (pgadmin-support@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-support