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,