[haiku-commits] haiku: hrev43291 - in src/apps/debugger: user_interface/gui/team_window user_interface/gui/util user_interface/gui/inspector_window settings

  • From: anevilyak@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 20 Nov 2011 00:21:34 +0100 (CET)

hrev43291 adds 7 changesets to branch 'master'
old head: b1f9573f594557d669c8bb2cf4af0940c44a3b23
new head: 11102e3848bcd78ce9a90478ad6992f966fae5c6

----------------------------------------------------------------------------

8314c36: Add GUISettingsUtils class to house settings utility functions.

0c07f01: Modify TeamWindow to use factored out archiving functions.

29ca41d: Add utility functions for saving/restoring the state of a Table.
  
  For the time being, these are simple wrappers around BColumnListView's
  {Save,Load}State() functions.

258d882: Simplify GUITeamUISettings to be simply message-based.

1483288: Simplify archiving functions.

79dbafb: Add GUI archiving utility functions to build.

11102e3: Reworked GUI settings storage.
  
  - Simplified things so each window simply records all its settings into
    a BMessage, which is what ultimately goes into the actual UI settings.
  
  - Added settings storage/retrieval to the various sub views of the
    team window. This means that the column widths/positioning on all
    views hosting a column list view are now also preserved and restored.

                                      [ Rene Gollent <anevilyak@xxxxxxxxx> ]


----------------------------------------------------------------------------

25 files changed, 491 insertions(+), 125 deletions(-)
src/apps/debugger/Jamfile                          |    2 +
src/apps/debugger/settings/GUITeamUISettings.cpp   |    8 +-
src/apps/debugger/settings/GUITeamUISettings.h     |    8 +-
.../gui/inspector_window/InspectorWindow.cpp       |   42 ++--
.../gui/inspector_window/InspectorWindow.h         |    8 +-
.../gui/team_window/BreakpointListView.cpp         |   28 +++
.../gui/team_window/BreakpointListView.h           |    3 +
.../gui/team_window/BreakpointsView.cpp            |   25 ++
.../gui/team_window/BreakpointsView.h              |    3 +
.../gui/team_window/ImageFunctionsView.cpp         |   28 +++
.../gui/team_window/ImageFunctionsView.h           |    3 +
.../gui/team_window/ImageListView.cpp              |   28 +++
.../user_interface/gui/team_window/ImageListView.h |    3 +
.../gui/team_window/RegistersView.cpp              |   28 +++
.../user_interface/gui/team_window/RegistersView.h |    3 +
.../gui/team_window/StackTraceView.cpp             |   28 +++
.../gui/team_window/StackTraceView.h               |    3 +
.../user_interface/gui/team_window/TeamWindow.cpp  |  191 +++++++++-------
.../user_interface/gui/team_window/TeamWindow.h    |    7 -
.../gui/team_window/ThreadListView.cpp             |   30 +++
.../gui/team_window/ThreadListView.h               |    3 +
.../gui/team_window/VariablesView.cpp              |   29 +++
.../user_interface/gui/team_window/VariablesView.h |    3 +
.../user_interface/gui/util/GUISettingsUtils.cpp   |   65 ++++++
.../user_interface/gui/util/GUISettingsUtils.h     |   37 +++

############################################################################

Commit:      8314c36b587554cbf28ff5bc5daf8011f9ab8682
URL:         http://cgit.haiku-os.org/haiku/commit/?id=8314c36
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 04:01:00 2011 UTC

Add GUISettingsUtils class to house settings utility functions.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
new file mode 100644
index 0000000..b49a3d8
--- /dev/null
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2011, Rene Gollent, rene@xxxxxxxxxxxx
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#include "GUISettingsUtils.h"
+
+
+#include <SplitView.h>
+
+#include "GUITeamUISettings.h"
+
+/*static*/ status_t
+GUISettingsUtils::ArchiveSplitView(const char* sourceName,
+       const char* viewName, GUITeamUISettings* settings, BSplitView* view)
+{
+       BString settingName;
+
+       for (int32 i = 0; i < view->CountItems(); i++) {
+               settingName.SetToFormat("%s%sSplit%d", sourceName, viewName, i);
+               if (!settings->SetValue(settingName.String(),
+                       view->ItemWeight(i)))
+                       return B_NO_MEMORY;
+
+               settingName.SetToFormat("%s%sCollapsed%d", sourceName, 
viewName, i);
+               if (!settings->SetValue(settingName.String(),
+                       view->IsItemCollapsed(i)))
+                       return B_NO_MEMORY;
+       }
+
+       return B_OK;
+}
+
+
+/*static*/ void
+GUISettingsUtils::UnarchiveSplitView(const char* sourceName,
+       const char* viewName, const GUITeamUISettings* settings, BSplitView* 
view)
+{
+       BString settingName;
+       BVariant value;
+
+       for (int32 i = 0; i < view->CountItems(); i++) {
+               settingName.SetToFormat("%s%sSplit%d", sourceName, viewName, i);
+               status_t error = settings->Value(settingName.String(), value);
+               if (error == B_OK) {
+                       view->SetItemWeight(i, value.ToFloat(),
+                               i == view->CountItems() - 1);
+               }
+
+               settingName.SetToFormat("%s%sCollapsed%d", sourceName, 
viewName, i);
+               error = settings->Value(settingName.String(), value);
+               if (error == B_OK)
+                       view->SetItemCollapsed(i, value.ToBool());
+       }
+}
diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
new file mode 100644
index 0000000..5cbc3d8
--- /dev/null
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2011, Rene Gollent, rene@xxxxxxxxxxxx
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef GUI_SETTINGS_UTILS_H
+#define GUI_SETTINGS_UTILS_H
+
+
+#include <SupportDefs.h>
+
+
+class BSplitView;
+class GUITeamUISettings;
+
+
+class GUISettingsUtils
+{
+public:
+
+       static  status_t                        ArchiveSplitView(const char* 
sourceName,
+                                                                       const 
char* viewName,
+                                                                       
GUITeamUISettings* settings,
+                                                                       
BSplitView* view);
+       static  void                            UnarchiveSplitView(const char* 
sourceName,
+                                                                       const 
char* viewName,
+                                                                       const 
GUITeamUISettings* settings,
+                                                                       
BSplitView* view);
+};
+
+
+#endif // GUI_SETTINGS_UTILS_H

############################################################################

Commit:      0c07f01eb643854a89794048c0954f1b0921b629
URL:         http://cgit.haiku-os.org/haiku/commit/?id=0c07f01
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 04:02:04 2011 UTC

Modify TeamWindow to use factored out archiving functions.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp 
b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
index e61d27f..d34bc10 100644
--- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
@@ -30,6 +30,7 @@
 #include "CpuState.h"
 #include "DisassembledCode.h"
 #include "FileSourceCode.h"
+#include "GUISettingsUtils.h"
 #include "GUITeamUISettings.h"
 #include "Image.h"
 #include "ImageDebugInfo.h"
@@ -361,10 +362,14 @@ TeamWindow::LoadSettings(const GUITeamUISettings* 
settings)
                MoveTo(rect.left, rect.top);
        }
 
-       _LoadSplitSettings(fSourceSplitView, "Source", settings);
-       _LoadSplitSettings(fFunctionSplitView, "Function", settings);
-       _LoadSplitSettings(fImageSplitView, "Image", settings);
-       _LoadSplitSettings(fThreadSplitView, "Thread", settings);
+       GUISettingsUtils::UnarchiveSplitView(Name(), "Source", settings,
+               fSourceSplitView);
+       GUISettingsUtils::UnarchiveSplitView(Name(), "Function", settings,
+               fFunctionSplitView);
+       GUISettingsUtils::UnarchiveSplitView(Name(), "Image", settings,
+               fImageSplitView);
+       GUISettingsUtils::UnarchiveSplitView(Name(), "Thread", settings,
+               fThreadSplitView);
 
        fUISettings = *settings;
 
@@ -399,16 +404,20 @@ TeamWindow::SaveSettings(GUITeamUISettings* settings)
        if (!settings->SetValue("teamWindowFrame", Frame()))
                return B_NO_MEMORY;
 
-       if (_SaveSplitSettings(fSourceSplitView, "Source", settings) != B_OK)
+       if (GUISettingsUtils::ArchiveSplitView(Name(), "Source",
+               settings, fSourceSplitView) != B_OK)
                return B_NO_MEMORY;
 
-       if (_SaveSplitSettings(fFunctionSplitView, "Function", settings) != 
B_OK)
+       if (GUISettingsUtils::ArchiveSplitView(Name(), "Function",
+               settings, fFunctionSplitView) != B_OK)
                return B_NO_MEMORY;
 
-       if (_SaveSplitSettings(fImageSplitView, "Image", settings) != B_OK)
+       if (GUISettingsUtils::ArchiveSplitView(Name(), "Image",
+               settings, fImageSplitView) != B_OK)
                return B_NO_MEMORY;
 
-       if (_SaveSplitSettings(fThreadSplitView, "Thread", settings) != B_OK)
+       if (GUISettingsUtils::ArchiveSplitView(Name(), "Thread",
+               settings, fThreadSplitView) != B_OK)
                return B_NO_MEMORY;
 
        return B_OK;
@@ -1174,51 +1183,6 @@ TeamWindow::_HandleResolveMissingSourceFile(entry_ref& 
locatedPath)
 }
 
 
-void
-TeamWindow::_LoadSplitSettings(BSplitView* view, const char* name,
-       const GUITeamUISettings* settings)
-{
-       BString settingName;
-       BVariant value;
-
-       for (int32 i = 0; i < view->CountItems(); i++) {
-               settingName.SetToFormat("teamWindow%sSplit%d", name, i);
-               status_t error = settings->Value(settingName.String(), value);
-               if (error == B_OK) {
-                       view->SetItemWeight(i, value.ToFloat(),
-                               i == view->CountItems() - 1);
-               }
-
-               settingName.SetToFormat("teamWindow%sCollapsed%d", name, i);
-               error = settings->Value(settingName.String(), value);
-               if (error == B_OK)
-                       view->SetItemCollapsed(i, value.ToBool());
-       }
-}
-
-
-status_t
-TeamWindow::_SaveSplitSettings(BSplitView* view, const char* name,
-       GUITeamUISettings* settings)
-{
-       BString settingName;
-
-       for (int32 i = 0; i < view->CountItems(); i++) {
-               settingName.SetToFormat("teamWindow%sSplit%d", name, i);
-               if (!settings->SetValue(settingName.String(),
-                       view->ItemWeight(i)))
-                       return B_NO_MEMORY;
-
-               settingName.SetToFormat("teamWindow%sCollapsed%d", name, i);
-               if (!settings->SetValue(settingName.String(), 
-                       view->IsItemCollapsed(i)))
-                       return B_NO_MEMORY;
-       }
-
-       return B_OK;
-}
-
-
 status_t
 TeamWindow::_SaveInspectorSettings(const BMessage* settings)
 {
diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h 
b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h
index 996c45b..3732ed0 100644
--- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h
+++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.h
@@ -144,13 +144,6 @@ private:
                        void                            
_HandleResolveMissingSourceFile(entry_ref&
                                                                        
locatedPath);
 
-                       void                            
_LoadSplitSettings(BSplitView* view,
-                                                                       const 
char* name,
-                                                                       const 
GUITeamUISettings* settings);
-                       status_t                        
_SaveSplitSettings(BSplitView* view,
-                                                                       const 
char* name,
-                                                                       
GUITeamUISettings* settings);
-
                        status_t                        _SaveInspectorSettings(
                                                                        const 
BMessage* settings);
 private:

############################################################################

Commit:      29ca41d54125a6f53b3557585510d6e4807c02a8
URL:         http://cgit.haiku-os.org/haiku/commit/?id=29ca41d
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 04:15:13 2011 UTC

Add utility functions for saving/restoring the state of a Table.

For the time being, these are simple wrappers around BColumnListView's
{Save,Load}State() functions.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
index b49a3d8..2c35b88 100644
--- a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
@@ -10,6 +10,8 @@
 #include <SplitView.h>
 
 #include "GUITeamUISettings.h"
+#include "table/AbstractTable.h"
+
 
 /*static*/ status_t
 GUISettingsUtils::ArchiveSplitView(const char* sourceName,
@@ -54,3 +56,34 @@ GUISettingsUtils::UnarchiveSplitView(const char* sourceName,
                        view->SetItemCollapsed(i, value.ToBool());
        }
 }
+
+
+/*static*/ status_t
+GUISettingsUtils::ArchiveTableSettings(const char* sourceName,
+       const char* viewName, GUITeamUISettings* settings, AbstractTable* table)
+{
+       BString settingName;
+       BMessage data;
+
+       settingName.SetToFormat("%s%sTable", sourceName, viewName);
+       table->SaveState(&data);
+       if (!settings->AddSettings(settingName.String(), data))
+               return B_NO_MEMORY;
+
+       return B_OK;
+}
+
+
+/*static*/ void
+GUISettingsUtils::UnarchiveTableSettings(const char* sourceName,
+       const char* viewName, const GUITeamUISettings* settings,
+       AbstractTable* table)
+{
+       BString settingName;
+       BMessage data;
+
+       settingName.SetToFormat("%s%sTable", sourceName, viewName);
+       if (settings->Settings(settingName.String(), data) == B_OK)
+               table->LoadState(&data);
+}
+
diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
index 5cbc3d8..087eeca 100644
--- a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
@@ -9,6 +9,7 @@
 #include <SupportDefs.h>
 
 
+class AbstractTable;
 class BSplitView;
 class GUITeamUISettings;
 
@@ -25,6 +26,18 @@ public:
                                                                        const 
char* viewName,
                                                                        const 
GUITeamUISettings* settings,
                                                                        
BSplitView* view);
+
+       static  status_t                        ArchiveTableSettings(const 
char* sourceName,
+                                                                       const 
char* viewName,
+                                                                       
GUITeamUISettings* settings,
+                                                                       
AbstractTable* table);
+
+       static  void                            UnarchiveTableSettings(const 
char* sourceName,
+                                                                       const 
char* viewName,
+                                                                       const 
GUITeamUISettings* settings,
+                                                                       
AbstractTable* table);
+
+
 };
 
 

############################################################################

Commit:      258d8821eae4a4a3dd33072c85070743c522b809
URL:         http://cgit.haiku-os.org/haiku/commit/?id=258d882
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 23:10:59 2011 UTC

Simplify GUITeamUISettings to be simply message-based.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/settings/GUITeamUISettings.cpp 
b/src/apps/debugger/settings/GUITeamUISettings.cpp
index d1edf33..93941e8 100644
--- a/src/apps/debugger/settings/GUITeamUISettings.cpp
+++ b/src/apps/debugger/settings/GUITeamUISettings.cpp
@@ -97,18 +97,18 @@ GUITeamUISettings::Clone() const
 
 
 bool
-GUITeamUISettings::SetValue(const char* settingID, const BVariant& value)
+GUITeamUISettings::AddSettings(const char* settingID, const BMessage& data)
 {
        fValues.RemoveName(settingID);
 
-       return value.AddToMessage(fValues, settingID) == B_OK;
+       return fValues.AddMessage(settingID, &data) == B_OK;
 }
 
 
 status_t
-GUITeamUISettings::Value(const char* settingID, BVariant &value) const
+GUITeamUISettings::Settings(const char* settingID, BMessage &data) const
 {
-       return value.SetFromMessage(fValues, settingID);
+       return fValues.FindMessage(settingID, &data);
 }
 
 
diff --git a/src/apps/debugger/settings/GUITeamUISettings.h 
b/src/apps/debugger/settings/GUITeamUISettings.h
index a7a74d1..dbf365e 100644
--- a/src/apps/debugger/settings/GUITeamUISettings.h
+++ b/src/apps/debugger/settings/GUITeamUISettings.h
@@ -30,10 +30,10 @@ public:
        virtual status_t                        WriteTo(BMessage& archive) 
const;
        virtual TeamUISettings*         Clone() const;
 
-                       bool                            SetValue(const char* 
settingID,
-                                                                       const 
BVariant& value);
-                       status_t                        Value(const char* 
settingID,
-                                                                       
BVariant& value) const;
+                       bool                            AddSettings(const char* 
settingID,
+                                                                       const 
BMessage& data);
+                       status_t                        Settings(const char* 
settingID,
+                                                                       
BMessage& data) const;
 
                        const BMessage&         Values() const;
 

############################################################################

Commit:      1483288fe185481256750693f926d2c08461d12c
URL:         http://cgit.haiku-os.org/haiku/commit/?id=1483288
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 23:11:36 2011 UTC

Simplify archiving functions.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
index 2c35b88..7d84b99 100644
--- a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.cpp
@@ -6,28 +6,21 @@
 
 #include "GUISettingsUtils.h"
 
-
+#include <Message.h>
 #include <SplitView.h>
 
-#include "GUITeamUISettings.h"
 #include "table/AbstractTable.h"
 
 
 /*static*/ status_t
-GUISettingsUtils::ArchiveSplitView(const char* sourceName,
-       const char* viewName, GUITeamUISettings* settings, BSplitView* view)
+GUISettingsUtils::ArchiveSplitView(BMessage& settings, BSplitView* view)
 {
-       BString settingName;
-
+       settings.MakeEmpty();
        for (int32 i = 0; i < view->CountItems(); i++) {
-               settingName.SetToFormat("%s%sSplit%d", sourceName, viewName, i);
-               if (!settings->SetValue(settingName.String(),
-                       view->ItemWeight(i)))
+               if (settings.AddFloat("weight", view->ItemWeight(i)) != B_OK)
                        return B_NO_MEMORY;
 
-               settingName.SetToFormat("%s%sCollapsed%d", sourceName, 
viewName, i);
-               if (!settings->SetValue(settingName.String(),
-                       view->IsItemCollapsed(i)))
+               if (settings.AddFloat("collapsed", view->IsItemCollapsed(i)) != 
B_OK)
                        return B_NO_MEMORY;
        }
 
@@ -36,54 +29,37 @@ GUISettingsUtils::ArchiveSplitView(const char* sourceName,
 
 
 /*static*/ void
-GUISettingsUtils::UnarchiveSplitView(const char* sourceName,
-       const char* viewName, const GUITeamUISettings* settings, BSplitView* 
view)
+GUISettingsUtils::UnarchiveSplitView(const BMessage& settings,
+       BSplitView* view)
 {
-       BString settingName;
-       BVariant value;
-
        for (int32 i = 0; i < view->CountItems(); i++) {
-               settingName.SetToFormat("%s%sSplit%d", sourceName, viewName, i);
-               status_t error = settings->Value(settingName.String(), value);
-               if (error == B_OK) {
-                       view->SetItemWeight(i, value.ToFloat(),
-                               i == view->CountItems() - 1);
-               }
-
-               settingName.SetToFormat("%s%sCollapsed%d", sourceName, 
viewName, i);
-               error = settings->Value(settingName.String(), value);
-               if (error == B_OK)
-                       view->SetItemCollapsed(i, value.ToBool());
+               float weight;
+               if (settings.FindFloat("weight", i, &weight) == B_OK)
+                       view->SetItemWeight(i, weight, i == view->CountItems() 
- 1);
+
+               bool collapsed;
+               if (settings.FindBool("collapsed", i, &collapsed) == B_OK)
+                       view->SetItemCollapsed(i, collapsed);
        }
 }
 
 
 /*static*/ status_t
-GUISettingsUtils::ArchiveTableSettings(const char* sourceName,
-       const char* viewName, GUITeamUISettings* settings, AbstractTable* table)
+GUISettingsUtils::ArchiveTableSettings(BMessage& settings,
+       AbstractTable* table)
 {
-       BString settingName;
-       BMessage data;
-
-       settingName.SetToFormat("%s%sTable", sourceName, viewName);
-       table->SaveState(&data);
-       if (!settings->AddSettings(settingName.String(), data))
-               return B_NO_MEMORY;
+       settings.MakeEmpty();
+       table->SaveState(&settings);
 
        return B_OK;
 }
 
 
 /*static*/ void
-GUISettingsUtils::UnarchiveTableSettings(const char* sourceName,
-       const char* viewName, const GUITeamUISettings* settings,
+GUISettingsUtils::UnarchiveTableSettings(const BMessage& settings,
        AbstractTable* table)
 {
-       BString settingName;
-       BMessage data;
-
-       settingName.SetToFormat("%s%sTable", sourceName, viewName);
-       if (settings->Settings(settingName.String(), data) == B_OK)
-               table->LoadState(&data);
+       BMessage settingsCopy(settings);
+       table->LoadState(&settingsCopy);
 }
 
diff --git a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h 
b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
index 087eeca..6bafadb 100644
--- a/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
+++ b/src/apps/debugger/user_interface/gui/util/GUISettingsUtils.h
@@ -10,31 +10,24 @@
 
 
 class AbstractTable;
+class BMessage;
 class BSplitView;
-class GUITeamUISettings;
 
 
 class GUISettingsUtils
 {
 public:
 
-       static  status_t                        ArchiveSplitView(const char* 
sourceName,
-                                                                       const 
char* viewName,
-                                                                       
GUITeamUISettings* settings,
+       static  status_t                        ArchiveSplitView(BMessage& 
settings,
                                                                        
BSplitView* view);
-       static  void                            UnarchiveSplitView(const char* 
sourceName,
-                                                                       const 
char* viewName,
-                                                                       const 
GUITeamUISettings* settings,
+       static  void                            UnarchiveSplitView(const 
BMessage& settings,
                                                                        
BSplitView* view);
 
-       static  status_t                        ArchiveTableSettings(const 
char* sourceName,
-                                                                       const 
char* viewName,
-                                                                       
GUITeamUISettings* settings,
+       static  status_t                        ArchiveTableSettings(BMessage& 
settings,
                                                                        
AbstractTable* table);
 
-       static  void                            UnarchiveTableSettings(const 
char* sourceName,
-                                                                       const 
char* viewName,
-                                                                       const 
GUITeamUISettings* settings,
+       static  void                            UnarchiveTableSettings(
+                                                                       const 
BMessage& settings,
                                                                        
AbstractTable* table);
 
 

############################################################################

Commit:      79dbafbc668ee2488757b50264f2bedf9677009a
URL:         http://cgit.haiku-os.org/haiku/commit/?id=79dbafb
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 23:12:41 2011 UTC

Add GUI archiving utility functions to build.

----------------------------------------------------------------------------

diff --git a/src/apps/debugger/Jamfile b/src/apps/debugger/Jamfile
index c78bd43..9d04f5b 100644
--- a/src/apps/debugger/Jamfile
+++ b/src/apps/debugger/Jamfile
@@ -200,9 +200,11 @@ Application Debugger :
        VariablesView.cpp
 
        # user_interface/gui/util
+       GUISettingsUtils.cpp
        SettingsMenu.cpp
        TargetAddressTableColumn.cpp
 
+
        # user_interface/gui/value
        TableCellBoolRenderer.cpp
        TableCellEnumerationRenderer.cpp

############################################################################

Revision:    hrev43291
Commit:      11102e3848bcd78ce9a90478ad6992f966fae5c6
URL:         http://cgit.haiku-os.org/haiku/commit/?id=11102e3
Author:      Rene Gollent <anevilyak@xxxxxxxxx>
Date:        Sat Nov 19 23:14:45 2011 UTC

Reworked GUI settings storage.

- Simplified things so each window simply records all its settings into
  a BMessage, which is what ultimately goes into the actual UI settings.

- Added settings storage/retrieval to the various sub views of the
  team window. This means that the column widths/positioning on all
  views hosting a column list view are now also preserved and restored.

----------------------------------------------------------------------------

diff --git 
a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp 
b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
index 742e5b2..c3612e6 100644
--- a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
+++ b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.cpp
@@ -267,7 +267,7 @@ bool
 InspectorWindow::QuitRequested()
 {
        BMessage settings(MSG_INSPECTOR_WINDOW_CLOSED);
-       SaveSettings(&settings);
+       SaveSettings(settings);
 
        BMessenger(fTarget).SendMessage(&settings);
        return true;
@@ -288,35 +288,40 @@ InspectorWindow::MemoryBlockRetrieved(TeamMemoryBlock* 
block)
 
 
 status_t
-InspectorWindow::LoadSettings(const GUITeamUISettings* settings)
+InspectorWindow::LoadSettings(const GUITeamUISettings& settings)
 {
        AutoLocker<BLooper> lock(this);
        if (!lock.IsLocked())
                return B_ERROR;
 
-       BVariant value;
-       if (settings->Value("inspectorWindowFrame", value) == B_OK) {
-               BRect frameRect = value.ToRect();
+       BMessage inspectorSettings;
+       if (settings.Settings("inspectorWindow", inspectorSettings) == B_OK)
+               return B_OK;
+
+       BRect frameRect;
+       if (inspectorSettings.FindRect("frame", &frameRect) == B_OK) {
                ResizeTo(frameRect.Width(), frameRect.Height());
                MoveTo(frameRect.left, frameRect.top);
        }
 
-       _LoadMenuFieldMode(fHexMode, "Hex", settings);
-       _LoadMenuFieldMode(fEndianMode, "Endian", settings);
-       _LoadMenuFieldMode(fTextMode, "Text", settings);
+       _LoadMenuFieldMode(fHexMode, "Hex", inspectorSettings);
+       _LoadMenuFieldMode(fEndianMode, "Endian", inspectorSettings);
+       _LoadMenuFieldMode(fTextMode, "Text", inspectorSettings);
 
        return B_OK;
 }
 
 
 status_t
-InspectorWindow::SaveSettings(BMessage* settings)
+InspectorWindow::SaveSettings(BMessage& settings)
 {
        AutoLocker<BLooper> lock(this);
        if (!lock.IsLocked())
                return B_ERROR;
 
-       status_t error = settings->AddRect("inspectorWindowFrame", Frame());
+       settings.MakeEmpty();
+
+       status_t error = settings.AddRect("frame", Frame());
        if (error != B_OK)
                return error;
 
@@ -338,17 +343,16 @@ InspectorWindow::SaveSettings(BMessage* settings)
 
 void
 InspectorWindow::_LoadMenuFieldMode(BMenuField* field, const char* name,
-       const GUITeamUISettings* settings)
+       const BMessage& settings)
 {
-       BVariant value;
        BString fieldName;
-       fieldName.SetToFormat("inspectorWindow%sMode", name);
-       status_t error = settings->Value(fieldName.String(), value);
-       if (error == B_OK) {
+       int32 mode;
+       fieldName.SetToFormat("%sMode", name);
+       if (settings.FindInt32(fieldName.String(), &mode) == B_OK) {
                BMenu* menu = field->Menu();
                for (int32 i = 0; i < menu->CountItems(); i++) {
                        BInvoker* item = menu->ItemAt(i);
-                       if (item->Message()->FindInt32("mode") == 
value.ToInt32()) {
+                       if (item->Message()->FindInt32("mode") == mode) {
                                item->Invoke();
                                break;
                        }
@@ -359,14 +363,14 @@ InspectorWindow::_LoadMenuFieldMode(BMenuField* field, 
const char* name,
 
 status_t
 InspectorWindow::_SaveMenuFieldMode(BMenuField* field, const char* name,
-       BMessage* settings)
+       BMessage& settings)
 {
        BMenuItem* item = field->Menu()->FindMarked();
        if (item && item->Message()) {
                int32 mode = item->Message()->FindInt32("mode");
                BString fieldName;
-               fieldName.SetToFormat("inspectorWindow%sMode", name);
-               return settings->AddInt32(fieldName.String(), mode);
+               fieldName.SetToFormat("%sMode", name);
+               return settings.AddInt32(fieldName.String(), mode);
        }
 
        return B_OK;
diff --git 
a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h 
b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
index 12e9abd..9c85112 100644
--- a/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
+++ b/src/apps/debugger/user_interface/gui/inspector_window/InspectorWindow.h
@@ -41,18 +41,18 @@ public:
        virtual void                            
MemoryBlockRetrieved(TeamMemoryBlock* block);
 
                        status_t                        LoadSettings(
-                                                                       const 
GUITeamUISettings* settings);
+                                                                       const 
GUITeamUISettings& settings);
                        status_t                        SaveSettings(
-                                                                       
BMessage* settings);
+                                                                       
BMessage& settings);
 private:
        void                                            _Init();
 
        void                                            
_LoadMenuFieldMode(BMenuField* field,
                                                                        const 
char* name,
-                                                                       const 
GUITeamUISettings* settings);
+                                                                       const 
BMessage& settings);
        status_t                                        
_SaveMenuFieldMode(BMenuField* field,
                                                                        const 
char* name,
-                                                                       
BMessage* settings);
+                                                                       
BMessage& settings);
 
 private:
        UserInterfaceListener*          fListener;
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.cpp
index 3ffc74e..e05ca08 100644
--- a/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.cpp
@@ -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.
  */
 
@@ -14,6 +15,7 @@
 #include <ObjectList.h>
 
 #include "FunctionID.h"
+#include "GUISettingsUtils.h"
 #include "LocatableFile.h"
 #include "table/TableColumns.h"
 #include "Team.h"
@@ -235,6 +237,32 @@ BreakpointListView::UserBreakpointChanged(UserBreakpoint* 
breakpoint)
 
 
 void
+BreakpointListView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("breakpointsTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fBreakpointsTable);
+       }
+}
+
+
+status_t
+BreakpointListView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fBreakpointsTable);
+       if (result == B_OK)
+               result = settings.AddMessage("breakpointsTable", 
&tableSettings);
+
+       return result;
+}
+
+
+void
 BreakpointListView::TableSelectionChanged(Table* table)
 {
        if (fListener == NULL)
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.h 
b/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.h
index d997aac..73ebc0e 100644
--- a/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointListView.h
@@ -33,6 +33,9 @@ public:
                        void                            UserBreakpointChanged(
                                                                        
UserBreakpoint* breakpoint);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class BreakpointsTableModel;
 
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp
index c644b41..176d6ca 100644
--- a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.cpp
@@ -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.
  */
 
@@ -127,6 +128,30 @@ BreakpointsView::AttachedToWindow()
 
 
 void
+BreakpointsView::LoadSettings(const BMessage& settings)
+{
+       BMessage breakpointListSettings;
+       if (settings.FindMessage("breakpointList", &breakpointListSettings)
+               == B_OK)
+               fListView->LoadSettings(breakpointListSettings);
+}
+
+
+status_t
+BreakpointsView::SaveSettings(BMessage& settings)
+{
+       BMessage breakpointListSettings;
+       if (fListView->SaveSettings(breakpointListSettings) != B_OK)
+               return B_NO_MEMORY;
+
+       if (settings.AddMessage("breakpointList", &breakpointListSettings) != 
B_OK)
+               return B_NO_MEMORY;
+
+       return B_OK;
+}
+
+
+void
 BreakpointsView::BreakpointSelectionChanged(UserBreakpoint* breakpoint)
 {
        if (fListener != NULL)
diff --git a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h 
b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h
index ebc9ef7..2240252 100644
--- a/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/BreakpointsView.h
@@ -35,6 +35,9 @@ public:
        virtual void                            MessageReceived(BMessage* 
message);
        virtual void                            AttachedToWindow();
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
        // BreakpointListView::Listener
        virtual void                            BreakpointSelectionChanged(
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.cpp
index f39a73b..7931502 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.cpp
@@ -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.
  */
 
@@ -15,6 +16,7 @@
 #include "table/TableColumns.h"
 
 #include "FunctionInstance.h"
+#include "GUISettingsUtils.h"
 #include "Image.h"
 #include "ImageDebugInfo.h"
 #include "LocatableFile.h"
@@ -392,6 +394,32 @@ ImageFunctionsView::SetFunction(FunctionInstance* function)
 
 
 void
+ImageFunctionsView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("functionsTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fFunctionsTable);
+       }
+}
+
+
+status_t
+ImageFunctionsView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fFunctionsTable);
+       if (result == B_OK)
+               result = settings.AddMessage("functionsTable", &tableSettings);
+
+       return result;
+}
+
+
+void
 ImageFunctionsView::TreeTableSelectionChanged(TreeTable* table)
 {
        if (fListener == NULL)
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.h 
b/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.h
index cf64b38..eb4ed26 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/ImageFunctionsView.h
@@ -31,6 +31,9 @@ public:
                                                                        
ImageDebugInfo* imageDebugInfo);
                        void                            
SetFunction(FunctionInstance* function);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class FunctionsTableModel;
 
diff --git a/src/apps/debugger/user_interface/gui/team_window/ImageListView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/ImageListView.cpp
index cbc9a3d..4371ac8 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ImageListView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/ImageListView.cpp
@@ -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.
  */
 
@@ -15,6 +16,7 @@
 #include <AutoLocker.h>
 #include <ObjectList.h>
 
+#include "GUISettingsUtils.h"
 #include "table/TableColumns.h"
 #include "Tracing.h"
 
@@ -225,6 +227,32 @@ ImageListView::MessageReceived(BMessage* message)
 
 
 void
+ImageListView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("imagesTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fImagesTable);
+       }
+}
+
+
+status_t
+ImageListView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fImagesTable);
+       if (result == B_OK)
+               result = settings.AddMessage("imagesTable", &tableSettings);
+
+       return result;
+}
+
+
+void
 ImageListView::ImageAdded(const Team::ImageEvent& event)
 {
        Looper()->PostMessage(MSG_SYNC_IMAGE_LIST, this);
diff --git a/src/apps/debugger/user_interface/gui/team_window/ImageListView.h 
b/src/apps/debugger/user_interface/gui/team_window/ImageListView.h
index a27c20b..e66665b 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ImageListView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/ImageListView.h
@@ -29,6 +29,9 @@ public:
 
        virtual void                            MessageReceived(BMessage* 
message);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class ImagesTableModel;
 
diff --git a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp
index bb20391..12a8655 100644
--- a/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/RegistersView.cpp
@@ -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.
  */
 
@@ -15,6 +16,7 @@
 
 #include "Architecture.h"
 #include "CpuState.h"
+#include "GUISettingsUtils.h"
 #include "Register.h"
 
 
@@ -227,6 +229,32 @@ RegistersView::SetCpuState(CpuState* cpuState)
 
 
 void
+RegistersView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("registerTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fRegisterTable);
+       }
+}
+
+
+status_t
+RegistersView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fRegisterTable);
+       if (result == B_OK)
+               result = settings.AddMessage("registerTable", &tableSettings);
+
+       return result;
+}
+
+
+void
 RegistersView::TableRowInvoked(Table* table, int32 rowIndex)
 {
 }
diff --git a/src/apps/debugger/user_interface/gui/team_window/RegistersView.h 
b/src/apps/debugger/user_interface/gui/team_window/RegistersView.h
index bffb6f7..8c68092 100644
--- a/src/apps/debugger/user_interface/gui/team_window/RegistersView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/RegistersView.h
@@ -24,6 +24,9 @@ public:
 
                        void                            SetCpuState(CpuState* 
cpuState);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class RegisterValueColumn;
                        class RegisterTableModel;
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/StackTraceView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/StackTraceView.cpp
index ed79bda..0ac14d9 100644
--- a/src/apps/debugger/user_interface/gui/team_window/StackTraceView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/StackTraceView.cpp
@@ -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.
  */
 
@@ -15,6 +16,7 @@
 #include "table/TableColumns.h"
 
 #include "FunctionInstance.h"
+#include "GUISettingsUtils.h"
 #include "Image.h"
 #include "StackTrace.h"
 #include "TargetAddressTableColumn.h"
@@ -197,6 +199,32 @@ StackTraceView::SetStackFrame(StackFrame* stackFrame)
 
 
 void
+StackTraceView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("framesTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fFramesTable);
+       }
+}
+
+
+status_t
+StackTraceView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fFramesTable);
+       if (result == B_OK)
+               result = settings.AddMessage("framesTable", &tableSettings);
+
+       return result;
+}
+
+
+void
 StackTraceView::TableSelectionChanged(Table* table)
 {
        if (fListener == NULL)
diff --git a/src/apps/debugger/user_interface/gui/team_window/StackTraceView.h 
b/src/apps/debugger/user_interface/gui/team_window/StackTraceView.h
index fc751f2..5ce2fbe 100644
--- a/src/apps/debugger/user_interface/gui/team_window/StackTraceView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/StackTraceView.h
@@ -30,6 +30,9 @@ public:
                        void                            
SetStackTrace(StackTrace* stackTrace);
                        void                            
SetStackFrame(StackFrame* stackFrame);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class FramesTableModel;
 
diff --git a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp 
b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
index d34bc10..3689520 100644
--- a/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/TeamWindow.cpp
@@ -224,7 +224,8 @@ TeamWindow::MessageReceived(BMessage* message)
                                fInspectorWindow = 
InspectorWindow::Create(fTeam, fListener,
                                        this);
                                if (fInspectorWindow != NULL) {
-                                       
fInspectorWindow->LoadSettings(&fUISettings);
+                                       BMessage settings;
+                                       
fInspectorWindow->LoadSettings(fUISettings);
                                        fInspectorWindow->Show();
                                }
                } catch (...) {
@@ -354,22 +355,50 @@ TeamWindow::LoadSettings(const GUITeamUISettings* 
settings)
        if (!lock.IsLocked())
                return B_ERROR;
 
-       BVariant value;
-       status_t error = settings->Value("teamWindowFrame", value);
-       if (error == B_OK) {
-               BRect rect = value.ToRect();
-               ResizeTo(rect.Width(), rect.Height());
-               MoveTo(rect.left, rect.top);
+       BMessage teamWindowSettings;
+       // no settings stored yet
+       if (settings->Settings("teamWindow", teamWindowSettings) != B_OK)
+               return B_OK;
+
+       BRect frame;
+       if (teamWindowSettings.FindRect("frame", &frame) == B_OK) {
+               ResizeTo(frame.Width(), frame.Height());
+               MoveTo(frame.left, frame.top);
        }
 
-       GUISettingsUtils::UnarchiveSplitView(Name(), "Source", settings,
-               fSourceSplitView);
-       GUISettingsUtils::UnarchiveSplitView(Name(), "Function", settings,
-               fFunctionSplitView);
-       GUISettingsUtils::UnarchiveSplitView(Name(), "Image", settings,
-               fImageSplitView);
-       GUISettingsUtils::UnarchiveSplitView(Name(), "Thread", settings,
-               fThreadSplitView);
+       BMessage archive;
+       if (teamWindowSettings.FindMessage("sourceSplit", &archive) == B_OK)
+               GUISettingsUtils::UnarchiveSplitView(archive, fSourceSplitView);
+
+       if (teamWindowSettings.FindMessage("functionSplit", &archive) == B_OK)
+               GUISettingsUtils::UnarchiveSplitView(archive, 
fFunctionSplitView);
+
+       if (teamWindowSettings.FindMessage("imageSplit", &archive) == B_OK)
+               GUISettingsUtils::UnarchiveSplitView(archive, fImageSplitView);
+
+       if (teamWindowSettings.FindMessage("threadSplit", &archive) == B_OK)
+               GUISettingsUtils::UnarchiveSplitView(archive, fThreadSplitView);
+
+       if (teamWindowSettings.FindMessage("imageListView", &archive) == B_OK)
+               fImageListView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("imageFunctionsView", &archive) == 
B_OK)
+               fImageFunctionsView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("threadListView", &archive) == B_OK)
+               fThreadListView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("variablesView", &archive) == B_OK)
+               fVariablesView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("registersView", &archive) == B_OK)
+               fRegistersView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("stackTraceView", &archive) == B_OK)
+               fStackTraceView->LoadSettings(archive);
+
+       if (teamWindowSettings.FindMessage("breakpointsView", &archive) == B_OK)
+               fBreakpointsView->LoadSettings(archive);
 
        fUISettings = *settings;
 
@@ -384,40 +413,73 @@ TeamWindow::SaveSettings(GUITeamUISettings* settings)
        if (!lock.IsLocked())
                return B_ERROR;
 
-       // save the settings from the cached copy first,
-       // then overwrite them with our most current set
-       // this is necessary in order to preserve the settings
-       // of things like the inspector in case we haven't actually
-       // invoked them at all in this session
-       const BMessage& values = fUISettings.Values();
-       char *name;
-       type_code type;
-       BVariant value;
-       for (int32 i = 0; values.GetInfo(B_ANY_TYPE, i, &name, &type) == B_OK;
-               i++) {
-               if (value.SetFromMessage(values, name) == B_OK) {
-                       if (!settings->SetValue(name, value))
-                               return B_NO_MEMORY;
-               }
+       BMessage inspectorSettings;
+       if (fUISettings.Settings("inspectorWindow", inspectorSettings) == B_OK) 
{
+               if (!settings->AddSettings("inspectorWindow", 
inspectorSettings))
+                       return B_NO_MEMORY;
        }
 
-       if (!settings->SetValue("teamWindowFrame", Frame()))
+       BMessage archive;
+       BMessage teamWindowSettings;
+       if (teamWindowSettings.AddRect("frame", Frame()) != B_OK)
+               return B_NO_MEMORY;
+
+       if (GUISettingsUtils::ArchiveSplitView(archive, fSourceSplitView) != 
B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("sourceSplit", &archive) != B_OK)
+               return B_NO_MEMORY;
+
+       if (GUISettingsUtils::ArchiveSplitView(archive, fFunctionSplitView) != 
B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("functionSplit", &archive) != B_OK)
+               return B_NO_MEMORY;
+
+       if (GUISettingsUtils::ArchiveSplitView(archive, fImageSplitView) != 
B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("imageSplit", &archive))
+               return B_NO_MEMORY;
+
+       if (GUISettingsUtils::ArchiveSplitView(archive, fThreadSplitView) != 
B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("threadSplit", &archive))
                return B_NO_MEMORY;
 
-       if (GUISettingsUtils::ArchiveSplitView(Name(), "Source",
-               settings, fSourceSplitView) != B_OK)
+       if (fImageListView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("imageListView", &archive))
                return B_NO_MEMORY;
 
-       if (GUISettingsUtils::ArchiveSplitView(Name(), "Function",
-               settings, fFunctionSplitView) != B_OK)
+       if (fImageFunctionsView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("imageFunctionsView", &archive))
                return B_NO_MEMORY;
 
-       if (GUISettingsUtils::ArchiveSplitView(Name(), "Image",
-               settings, fImageSplitView) != B_OK)
+       if (fThreadListView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("threadListView", &archive))
                return B_NO_MEMORY;
 
-       if (GUISettingsUtils::ArchiveSplitView(Name(), "Thread",
-               settings, fThreadSplitView) != B_OK)
+       if (fVariablesView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("variablesView", &archive))
+               return B_NO_MEMORY;
+
+       if (fRegistersView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("registersView", &archive))
+               return B_NO_MEMORY;
+
+       if (fStackTraceView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("stackTraceView", &archive))
+               return B_NO_MEMORY;
+
+       if (fBreakpointsView->SaveSettings(archive) != B_OK)
+               return B_NO_MEMORY;
+       if (teamWindowSettings.AddMessage("breakpointsView", &archive))
+               return B_NO_MEMORY;
+
+       if (!settings->AddSettings("teamWindow", teamWindowSettings))
                return B_NO_MEMORY;
 
        return B_OK;
@@ -1186,17 +1248,8 @@ TeamWindow::_HandleResolveMissingSourceFile(entry_ref& 
locatedPath)
 status_t
 TeamWindow::_SaveInspectorSettings(const BMessage* settings)
 {
-       char *name;
-       type_code type;
-       BVariant value;
-
-       for (int32 i = 0; settings->GetInfo(B_ANY_TYPE, i, &name, &type) == 
B_OK;
-               i++) {
-               if (value.SetFromMessage(*settings, name) == B_OK) {
-                       if (!fUISettings.SetValue(name, value))
-                               return B_NO_MEMORY;
-               }
-       }
+       if (fUISettings.AddSettings("inspectorWindow", *settings) != B_OK)
+               return B_NO_MEMORY;
 
        return B_OK;
 }
diff --git 
a/src/apps/debugger/user_interface/gui/team_window/ThreadListView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/ThreadListView.cpp
index 4a3ab01..4799286 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ThreadListView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/ThreadListView.cpp
@@ -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.
  */
 
@@ -15,6 +16,7 @@
 #include <ObjectList.h>
 #include <ToolTip.h>
 
+#include "GUISettingsUtils.h"
 #include "table/TableColumns.h"
 
 
@@ -307,6 +309,34 @@ ThreadListView::MessageReceived(BMessage* message)
 
 
 void
+ThreadListView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("threadsTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fThreadsTable);
+       }
+}
+
+
+status_t
+ThreadListView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fThreadsTable);
+       if (result == B_OK)
+               result = settings.AddMessage("threadsTable", &tableSettings);
+
+       return result;
+}
+
+
+
+
+void
 ThreadListView::ThreadAdded(const Team::ThreadEvent& event)
 {
        Looper()->PostMessage(MSG_SYNC_THREAD_LIST, this);
diff --git a/src/apps/debugger/user_interface/gui/team_window/ThreadListView.h 
b/src/apps/debugger/user_interface/gui/team_window/ThreadListView.h
index 2d65b36..e5fb090 100644
--- a/src/apps/debugger/user_interface/gui/team_window/ThreadListView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/ThreadListView.h
@@ -33,6 +33,9 @@ public:
 
        virtual void                            MessageReceived(BMessage* 
message);
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
                        class ThreadsTableModel;
 
diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp 
b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp
index 15206ae..922d8d4 100644
--- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp
+++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp
@@ -22,6 +22,7 @@
 #include "Architecture.h"
 #include "FunctionID.h"
 #include "FunctionInstance.h"
+#include "GUISettingsUtils.h"
 #include "MessageCodes.h"
 #include "SettingsMenu.h"
 #include "StackFrame.h"
@@ -1520,6 +1521,34 @@ VariablesView::DetachedFromWindow()
 
 
 void
+VariablesView::LoadSettings(const BMessage& settings)
+{
+       BMessage tableSettings;
+       if (settings.FindMessage("variableTable", &tableSettings) == B_OK) {
+               GUISettingsUtils::UnarchiveTableSettings(tableSettings,
+                       fVariableTable);
+       }
+}
+
+
+status_t
+VariablesView::SaveSettings(BMessage& settings)
+{
+       settings.MakeEmpty();
+
+       BMessage tableSettings;
+       status_t result = GUISettingsUtils::ArchiveTableSettings(tableSettings,
+               fVariableTable);
+       if (result == B_OK)
+               result = settings.AddMessage("variableTable", &tableSettings);
+
+       return result;
+}
+
+
+
+
+void
 VariablesView::TreeTableNodeExpandedChanged(TreeTable* table,
        const TreeTablePath& path, bool expanded)
 {
diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h 
b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h
index 223d8f7..0310dbd 100644
--- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h
+++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h
@@ -41,6 +41,9 @@ public:
 
        virtual void                            DetachedFromWindow();
 
+                       void                            LoadSettings(const 
BMessage& settings);
+                       status_t                        SaveSettings(BMessage& 
settings);
+
 private:
        // TreeTableListener
        virtual void                            
TreeTableNodeExpandedChanged(TreeTable* table,


Other related posts: