hrev45515 adds 4 changesets to branch 'master' old head: af84ce79da03c13c332dba559d7c54f565e17f4a new head: 1b74b08f755ecb9b477b4cbbf264ccd0156746ad overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=1b74b08+%5Eaf84ce7 ---------------------------------------------------------------------------- 2b9c68a: Fix broken save/restore of split view settings. ba2c3d5: Extend Settings to allow value restoration via message. c819aef: Add renderer settings to VariablesViewNodeInfo. 1b74b08: Save/restore renderer settings in view state. [ Rene Gollent <anevilyak@xxxxxxxxx> ] ---------------------------------------------------------------------------- 6 files changed, 76 insertions(+), 6 deletions(-) src/apps/debugger/settings/generic/Settings.cpp | 19 ++++++++++ src/apps/debugger/settings/generic/Settings.h | 3 ++ .../gui/model/VariablesViewState.cpp | 14 ++++++-- .../gui/model/VariablesViewState.h | 7 ++++ .../gui/team_window/VariablesView.cpp | 37 ++++++++++++++++++-- .../user_interface/gui/util/GuiSettingsUtils.cpp | 2 +- ############################################################################ Commit: 2b9c68af5d1844d4f2fa33b1df28ed3d9d044e73 URL: http://cgit.haiku-os.org/haiku/commit/?id=2b9c68a Author: Rene Gollent <anevilyak@xxxxxxxxx> Date: Tue Apr 16 21:56:45 2013 UTC Fix broken save/restore of split view settings. ---------------------------------------------------------------------------- diff --git a/src/apps/debugger/user_interface/gui/util/GuiSettingsUtils.cpp b/src/apps/debugger/user_interface/gui/util/GuiSettingsUtils.cpp index 0528efb..6731a69 100644 --- a/src/apps/debugger/user_interface/gui/util/GuiSettingsUtils.cpp +++ b/src/apps/debugger/user_interface/gui/util/GuiSettingsUtils.cpp @@ -20,7 +20,7 @@ GuiSettingsUtils::ArchiveSplitView(BMessage& settings, BSplitView* view) if (settings.AddFloat("weight", view->ItemWeight(i)) != B_OK) return B_NO_MEMORY; - if (settings.AddFloat("collapsed", view->IsItemCollapsed(i)) != B_OK) + if (settings.AddBool("collapsed", view->IsItemCollapsed(i)) != B_OK) return B_NO_MEMORY; } ############################################################################ Commit: ba2c3d57f627328969d3507c55beb64909a50991 URL: http://cgit.haiku-os.org/haiku/commit/?id=ba2c3d5 Author: Rene Gollent <anevilyak@xxxxxxxxx> Date: Wed Apr 17 01:17:44 2013 UTC Extend Settings to allow value restoration via message. ---------------------------------------------------------------------------- diff --git a/src/apps/debugger/settings/generic/Settings.cpp b/src/apps/debugger/settings/generic/Settings.cpp index 686b729..dfc176d 100644 --- a/src/apps/debugger/settings/generic/Settings.cpp +++ b/src/apps/debugger/settings/generic/Settings.cpp @@ -1,4 +1,5 @@ /* + * Copyright 2013, Rene Gollent, rene@xxxxxxxxxxx. * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxx. * Distributed under the terms of the MIT License. */ @@ -81,6 +82,24 @@ Settings::SetValue(Setting* setting, const BVariant& value) } +bool +Settings::RestoreValues(const BMessage& message) +{ + AutoLocker<BLocker> locker(fLock); + + for (int32 i = 0; i < fDescription->CountSettings(); i++) { + Setting* setting = fDescription->SettingAt(i); + BVariant value; + if (value.SetFromMessage(message, setting->ID()) == B_OK) { + if (!SetValue(setting, value)) + return false; + } + } + + return true; +} + + SettingsOption* Settings::OptionValue(OptionsSetting* setting) const { diff --git a/src/apps/debugger/settings/generic/Settings.h b/src/apps/debugger/settings/generic/Settings.h index 5862fa3..b921702 100644 --- a/src/apps/debugger/settings/generic/Settings.h +++ b/src/apps/debugger/settings/generic/Settings.h @@ -1,4 +1,5 @@ /* + * Copyright 2013, Rene Gollent, rene@xxxxxxxxxxx. * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxx. * Distributed under the terms of the MIT License. */ @@ -40,6 +41,8 @@ public: bool SetValue(Setting* setting, const BVariant& value); + bool RestoreValues(const BMessage& message); + bool BoolValue(BoolSetting* setting) const { return Value(setting).ToBool(); } SettingsOption* OptionValue(OptionsSetting* setting) const; ############################################################################ Commit: c819aef9a1f669032786bcfa1e9d694856fc39bf URL: http://cgit.haiku-os.org/haiku/commit/?id=c819aef Author: Rene Gollent <anevilyak@xxxxxxxxx> Date: Wed Apr 17 01:18:35 2013 UTC Add renderer settings to VariablesViewNodeInfo. ---------------------------------------------------------------------------- diff --git a/src/apps/debugger/user_interface/gui/model/VariablesViewState.cpp b/src/apps/debugger/user_interface/gui/model/VariablesViewState.cpp index 87e0280..99dc79d 100644 --- a/src/apps/debugger/user_interface/gui/model/VariablesViewState.cpp +++ b/src/apps/debugger/user_interface/gui/model/VariablesViewState.cpp @@ -21,7 +21,8 @@ VariablesViewNodeInfo::VariablesViewNodeInfo() : fNodeExpanded(false), - fCastedType(NULL) + fCastedType(NULL), + fRendererSettings() { } @@ -29,7 +30,8 @@ VariablesViewNodeInfo::VariablesViewNodeInfo() VariablesViewNodeInfo::VariablesViewNodeInfo(const VariablesViewNodeInfo& other) : fNodeExpanded(other.fNodeExpanded), - fCastedType(other.fCastedType) + fCastedType(other.fCastedType), + fRendererSettings(other.fRendererSettings) { if (fCastedType != NULL) fCastedType->AcquireReference(); @@ -48,6 +50,7 @@ VariablesViewNodeInfo::operator=(const VariablesViewNodeInfo& other) { fNodeExpanded = other.fNodeExpanded; SetCastedType(other.fCastedType); + fRendererSettings = other.fRendererSettings; return *this; } @@ -72,6 +75,13 @@ VariablesViewNodeInfo::SetCastedType(Type* type) } +void +VariablesViewNodeInfo::SetRendererSettings(const BMessage& settings) +{ + fRendererSettings = settings; +} + + // #pragma mark - Key diff --git a/src/apps/debugger/user_interface/gui/model/VariablesViewState.h b/src/apps/debugger/user_interface/gui/model/VariablesViewState.h index 5705d7f..95b5f29 100644 --- a/src/apps/debugger/user_interface/gui/model/VariablesViewState.h +++ b/src/apps/debugger/user_interface/gui/model/VariablesViewState.h @@ -7,6 +7,7 @@ #define VARIABLES_VIEW_STATE_H +#include <Message.h> #include <Referenceable.h> #include <util/OpenHashTable.h> @@ -35,9 +36,15 @@ public: { return fCastedType; } void SetCastedType(Type* type); + const BMessage& GetRendererSettings() const + { return fRendererSettings; } + + void SetRendererSettings(const BMessage& settings); + private: bool fNodeExpanded; Type* fCastedType; + BMessage fRendererSettings; }; ############################################################################ Revision: hrev45515 Commit: 1b74b08f755ecb9b477b4cbbf264ccd0156746ad URL: http://cgit.haiku-os.org/haiku/commit/?id=1b74b08 Author: Rene Gollent <anevilyak@xxxxxxxxx> Date: Wed Apr 17 01:19:20 2013 UTC Save/restore renderer settings in view state. ---------------------------------------------------------------------------- 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 023be3b..fbae043 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp @@ -109,10 +109,11 @@ public: fValue(NULL), fValueHandler(NULL), fTableCellRenderer(NULL), + fLastRendererSettings(), + fCastedType(NULL), fComponentPath(NULL), fIsPresentationNode(isPresentationNode), - fHidden(false), - fCastedType(NULL) + fHidden(false) { fNodeChild->AcquireReference(); } @@ -214,6 +215,16 @@ public: fCastedType->AcquireReference(); } + const BMessage& GetLastRendererSettings() const + { + return fLastRendererSettings; + } + + void SetLastRendererSettings(const BMessage& settings) + { + fLastRendererSettings = settings; + } + TypeComponentPath* GetPath() const { return fComponentPath; @@ -324,11 +335,12 @@ private: Value* fValue; ValueHandler* fValueHandler; TableCellValueRenderer* fTableCellRenderer; + BMessage fLastRendererSettings; + Type* fCastedType; ChildList fChildren; TypeComponentPath* fComponentPath; bool fIsPresentationNode; bool fHidden; - Type* fCastedType; public: ModelNode* fNext; @@ -1075,6 +1087,14 @@ VariablesView::VariableTableModel::ValueNodeValueChanged(ValueNode* valueNode) modelNode->SetValueHandler(valueHandler); modelNode->SetTableCellRenderer(renderer); + // we have to restore renderer settings here since until this point + // we don't yet know what renderer is in use. + if (renderer != NULL) { + Settings* settings = renderer->GetSettings(); + if (settings != NULL) + settings->RestoreValues(modelNode->GetLastRendererSettings()); + } + // notify table model listeners NotifyNodeChanged(modelNode); } @@ -1987,6 +2007,12 @@ VariablesView::_AddViewStateDescendentNodeInfos(VariablesViewState* viewState, VariablesViewNodeInfo nodeInfo; nodeInfo.SetNodeExpanded(fVariableTable->IsNodeExpanded(path)); nodeInfo.SetCastedType(node->GetCastedType()); + TableCellValueRenderer* renderer = node->TableCellRenderer(); + if (renderer != NULL) { + Settings* settings = renderer->GetSettings(); + if (settings != NULL) + nodeInfo.SetRendererSettings(settings->Message()); + } status_t error = viewState->SetNodeInfo(node->GetVariable()->ID(), node->GetPath(), nodeInfo); @@ -2033,6 +2059,11 @@ VariablesView::_ApplyViewStateDescendentNodeInfos(VariablesViewState* viewState, } } + // we don't have a renderer yet so we can't apply the settings + // at this stage. Store them on the model node so we can lazily + // apply them once the value is retrieved. + node->SetLastRendererSettings(nodeInfo->GetRendererSettings()); + fVariableTable->SetNodeExpanded(path, nodeInfo->IsNodeExpanded()); // recurse