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

Reply via email to