[haiku-commits] r43121 - in haiku/trunk/src/apps/debugger: . settings user_interface user_interface/gui

  • From: anevilyak@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 2 Nov 2011 20:04:24 +0100 (CET)

Author: anevilyak
Date: 2011-11-02 20:04:24 +0100 (Wed, 02 Nov 2011)
New Revision: 43121
Changeset: https://dev.haiku-os.org/changeset/43121

Modified:
   haiku/trunk/src/apps/debugger/TeamDebugger.cpp
   haiku/trunk/src/apps/debugger/TeamDebugger.h
   haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp
   haiku/trunk/src/apps/debugger/settings/TeamSettings.h
   haiku/trunk/src/apps/debugger/user_interface/UserInterface.h
   haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp
   haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h
Log:
Add hooks to UserInterface to allow for saving/restoring of UI settings.
Make use of them as appopriate.



Modified: haiku/trunk/src/apps/debugger/TeamDebugger.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/TeamDebugger.cpp      2011-11-02 16:29:05 UTC 
(rev 43120)
+++ haiku/trunk/src/apps/debugger/TeamDebugger.cpp      2011-11-02 19:04:24 UTC 
(rev 43121)
@@ -1,6 +1,6 @@
 /*
  * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
- * Copyright 2010, Rene Gollent, rene@xxxxxxxxxxxx
+ * Copyright 2010-2011, Rene Gollent, rene@xxxxxxxxxxxx
  * Distributed under the terms of the MIT License.
  */
 
@@ -40,6 +40,7 @@
 #include "TeamMemoryBlock.h"
 #include "TeamMemoryBlockManager.h"
 #include "TeamSettings.h"
+#include "TeamUISettings.h"
 #include "Tracing.h"
 #include "ValueNode.h"
 #include "ValueNodeContainer.h"
@@ -1370,13 +1371,12 @@
        locker.Unlock();
 
        // load the settings
-       TeamSettings settings;
-       if (fSettingsManager->LoadTeamSettings(teamName, settings) != B_OK)
+       if (fSettingsManager->LoadTeamSettings(teamName, fTeamSettings) != B_OK)
                return;
 
        // create the saved breakpoints
        for (int32 i = 0; const BreakpointSetting* breakpointSetting
-                       = settings.BreakpointAt(i); i++) {
+                       = fTeamSettings.BreakpointAt(i); i++) {
                if (breakpointSetting->GetFunctionID() == NULL)
                        continue;
 
@@ -1404,6 +1404,11 @@
                fBreakpointManager->InstallUserBreakpoint(breakpoint,
                        breakpointSetting->IsEnabled());
        }
+
+       const TeamUISettings* uiSettings = fTeamSettings.UISettingFor(
+               fUserInterface->ID());
+       if (uiSettings != NULL)
+                       fUserInterface->LoadSettings(uiSettings);
 }
 
 
@@ -1415,6 +1420,22 @@
        TeamSettings settings;
        if (settings.SetTo(fTeam) != B_OK)
                return;
+
+       TeamUISettings* uiSettings = NULL;
+       if (fUserInterface->SaveSettings(uiSettings) != B_OK)
+               return;
+       if (uiSettings != NULL)
+               settings.AddUISettings(uiSettings);
+
+       // preserve the UI settings from our cached copy.
+       for (int32 i = 0; i < fTeamSettings.CountUISettings(); i++) {
+               const TeamUISettings* oldUISettings = 
fTeamSettings.UISettingAt(i);
+               if (strcmp(oldUISettings->ID(), fUserInterface->ID()) != 0) {
+                       TeamUISettings* clonedSettings = oldUISettings->Clone();
+                       if (clonedSettings != NULL)
+                               settings.AddUISettings(clonedSettings);
+               }
+       }
        locker.Unlock();
 
        // save the settings

Modified: haiku/trunk/src/apps/debugger/TeamDebugger.h
===================================================================
--- haiku/trunk/src/apps/debugger/TeamDebugger.h        2011-11-02 16:29:05 UTC 
(rev 43120)
+++ haiku/trunk/src/apps/debugger/TeamDebugger.h        2011-11-02 19:04:24 UTC 
(rev 43121)
@@ -13,6 +13,7 @@
 
 #include "DebugEvent.h"
 #include "Team.h"
+#include "TeamSettings.h"
 #include "ThreadHandler.h"
 #include "UserInterface.h"
 #include "Worker.h"
@@ -155,6 +156,7 @@
                        UserInterface*          fUserInterface;
        volatile bool                           fTerminating;
                        bool                            fKillTeamOnQuit;
+                       TeamSettings            fTeamSettings;
 };
 
 

Modified: haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp     2011-11-02 
16:29:05 UTC (rev 43120)
+++ haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp     2011-11-02 
19:04:24 UTC (rev 43121)
@@ -100,7 +100,7 @@
                        return error;
                }
        }
-       
+
        // add UI settings
        for (int32 i = 0; archive.FindMessage("uisettings", i, &childArchive)
                == B_OK; i++) {
@@ -111,7 +111,7 @@
                if (error != B_OK) {
                        delete setting;
                        return error;
-               }               
+               }
        }
 
        return B_OK;
@@ -136,13 +136,13 @@
                if (error != B_OK)
                        return error;
        }
-       
+
        for (int32 i = 0; TeamUISettings* uiSetting = fUISettings.ItemAt(i);
                        i++) {
                error = uiSetting->WriteTo(childArchive);
                if (error != B_OK)
                        return error;
-                       
+
                error = archive.AddMessage("uisettings", &childArchive);
                if (error != B_OK)
                        return error;
@@ -180,6 +180,29 @@
 }
 
 
+const TeamUISettings*
+TeamSettings::UISettingFor(const char* id) const
+{
+       for (int32 i = 0; i < fUISettings.CountItems(); i++) {
+               TeamUISettings* settings = fUISettings.ItemAt(i);
+               if (strcmp(settings->ID(), id) == 0)
+                       return settings;
+       }
+
+       return NULL;
+}
+
+
+status_t
+TeamSettings::AddUISettings(TeamUISettings* settings)
+{
+       if (!fUISettings.AddItem(settings))
+               return B_NO_MEMORY;
+
+       return B_OK;
+}
+
+
 TeamSettings&
 TeamSettings::operator=(const TeamSettings& other)
 {
@@ -221,7 +244,7 @@
                        i++) {
                delete breakpoint;
        }
-       
+
        for (int32 i = 0; TeamUISettings* uiSetting = fUISettings.ItemAt(i); 
i++)
                delete uiSetting;
 

Modified: haiku/trunk/src/apps/debugger/settings/TeamSettings.h
===================================================================
--- haiku/trunk/src/apps/debugger/settings/TeamSettings.h       2011-11-02 
16:29:05 UTC (rev 43120)
+++ haiku/trunk/src/apps/debugger/settings/TeamSettings.h       2011-11-02 
19:04:24 UTC (rev 43121)
@@ -32,9 +32,11 @@
 
                        int32                           CountBreakpoints() 
const;
                        const BreakpointSetting* BreakpointAt(int32 index) 
const;
-                       
+
                        int32                           CountUISettings() const;
                        const TeamUISettings*   UISettingAt(int32 index) const;
+                       const TeamUISettings*   UISettingFor(const char* id) 
const;
+                       status_t                        
AddUISettings(TeamUISettings* settings);
 
                        TeamSettings&           operator=(const TeamSettings& 
other);
                                                                        // 
throws std::bad_alloc

Modified: haiku/trunk/src/apps/debugger/user_interface/UserInterface.h
===================================================================
--- haiku/trunk/src/apps/debugger/user_interface/UserInterface.h        
2011-11-02 16:29:05 UTC (rev 43120)
+++ haiku/trunk/src/apps/debugger/user_interface/UserInterface.h        
2011-11-02 19:04:24 UTC (rev 43121)
@@ -19,6 +19,7 @@
 class Image;
 class StackFrame;
 class Team;
+class TeamUISettings;
 class Thread;
 class TypeComponentPath;
 class UserBreakpoint;
@@ -39,6 +40,8 @@
 public:
        virtual                                         ~UserInterface();
 
+       virtual const char*                     ID() const = 0;
+
        virtual status_t                        Init(Team* team,
                                                                        
UserInterfaceListener* listener) = 0;
        virtual void                            Show() = 0;
@@ -46,6 +49,11 @@
                                                                        // shut 
down the UI *now* -- no more user
                                                                        // 
feedback
 
+       virtual status_t                        LoadSettings(const 
TeamUISettings* settings)
+                                                                       = 0;
+       virtual status_t                        SaveSettings(TeamUISettings*& 
settings)
+                                                                       const = 
0;
+
        virtual void                            NotifyUser(const char* title,
                                                                        const 
char* message,
                                                                        
user_notification_type type) = 0;

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp 
2011-11-02 16:29:05 UTC (rev 43120)
+++ haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp 
2011-11-02 19:04:24 UTC (rev 43121)
@@ -1,5 +1,6 @@
 /*
  * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
+ * Copyright 2011, Rene Gollent, rene@xxxxxxxxxxxx
  * Distributed under the terms of the MIT License.
  */
 
@@ -8,6 +9,7 @@
 
 #include <Alert.h>
 
+#include "GUITeamUISettings.h"
 #include "TeamWindow.h"
 #include "Tracing.h"
 
@@ -26,6 +28,13 @@
 }
 
 
+const char*
+GraphicalUserInterface::ID() const
+{
+       return "GraphicalUserInterface";
+}
+
+
 status_t
 GraphicalUserInterface::Init(Team* team, UserInterfaceListener* listener)
 {
@@ -58,6 +67,28 @@
 }
 
 
+status_t
+GraphicalUserInterface::LoadSettings(const TeamUISettings* settings)
+{
+       // TODO: restore settings
+
+       return B_OK;
+}
+
+
+status_t
+GraphicalUserInterface::SaveSettings(TeamUISettings*& settings) const
+{
+       settings = new(std::nothrow) GUITeamUISettings(ID());
+       if (settings == NULL)
+               return B_NO_MEMORY;
+
+       // TODO: fill in settings
+
+       return B_OK;
+}
+
+
 void
 GraphicalUserInterface::NotifyUser(const char* title, const char* message,
        user_notification_type type)

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h
===================================================================
--- haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h   
2011-11-02 16:29:05 UTC (rev 43120)
+++ haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h   
2011-11-02 19:04:24 UTC (rev 43121)
@@ -18,6 +18,8 @@
                                                                
GraphicalUserInterface();
        virtual                                         
~GraphicalUserInterface();
 
+       virtual const char*                     ID() const;
+
        virtual status_t                        Init(Team* team,
                                                                        
UserInterfaceListener* listener);
        virtual void                            Show();
@@ -25,6 +27,9 @@
                                                                        // shut 
down the UI *now* -- no more user
                                                                        // 
feedback
 
+       virtual status_t                        LoadSettings(const 
TeamUISettings* settings);
+       virtual status_t                        SaveSettings(TeamUISettings*& 
settings) const;
+
        virtual void                            NotifyUser(const char* title,
                                                                        const 
char* message,
                                                                        
user_notification_type type);


Other related posts:

  • » [haiku-commits] r43121 - in haiku/trunk/src/apps/debugger: . settings user_interface user_interface/gui - anevilyak