Author: anevilyak Date: 2011-11-02 20:04:24 +0100 (Wed, 02 Nov 2011) New Revision: 43121 Changeset: https://dev.haiku-os.org/changeset/43121 Modified: haiku/trunk/src/apps/debugger/TeamDebugger.cpp haiku/trunk/src/apps/debugger/TeamDebugger.h haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp haiku/trunk/src/apps/debugger/settings/TeamSettings.h haiku/trunk/src/apps/debugger/user_interface/UserInterface.h haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h Log: Add hooks to UserInterface to allow for saving/restoring of UI settings. Make use of them as appopriate. Modified: haiku/trunk/src/apps/debugger/TeamDebugger.cpp =================================================================== --- haiku/trunk/src/apps/debugger/TeamDebugger.cpp 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/TeamDebugger.cpp 2011-11-02 19:04:24 UTC (rev 43121) @@ -1,6 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx - * Copyright 2010, Rene Gollent, rene@xxxxxxxxxxxx + * Copyright 2010-2011, Rene Gollent, rene@xxxxxxxxxxxx * Distributed under the terms of the MIT License. */ @@ -40,6 +40,7 @@ #include "TeamMemoryBlock.h" #include "TeamMemoryBlockManager.h" #include "TeamSettings.h" +#include "TeamUISettings.h" #include "Tracing.h" #include "ValueNode.h" #include "ValueNodeContainer.h" @@ -1370,13 +1371,12 @@ locker.Unlock(); // load the settings - TeamSettings settings; - if (fSettingsManager->LoadTeamSettings(teamName, settings) != B_OK) + if (fSettingsManager->LoadTeamSettings(teamName, fTeamSettings) != B_OK) return; // create the saved breakpoints for (int32 i = 0; const BreakpointSetting* breakpointSetting - = settings.BreakpointAt(i); i++) { + = fTeamSettings.BreakpointAt(i); i++) { if (breakpointSetting->GetFunctionID() == NULL) continue; @@ -1404,6 +1404,11 @@ fBreakpointManager->InstallUserBreakpoint(breakpoint, breakpointSetting->IsEnabled()); } + + const TeamUISettings* uiSettings = fTeamSettings.UISettingFor( + fUserInterface->ID()); + if (uiSettings != NULL) + fUserInterface->LoadSettings(uiSettings); } @@ -1415,6 +1420,22 @@ TeamSettings settings; if (settings.SetTo(fTeam) != B_OK) return; + + TeamUISettings* uiSettings = NULL; + if (fUserInterface->SaveSettings(uiSettings) != B_OK) + return; + if (uiSettings != NULL) + settings.AddUISettings(uiSettings); + + // preserve the UI settings from our cached copy. + for (int32 i = 0; i < fTeamSettings.CountUISettings(); i++) { + const TeamUISettings* oldUISettings = fTeamSettings.UISettingAt(i); + if (strcmp(oldUISettings->ID(), fUserInterface->ID()) != 0) { + TeamUISettings* clonedSettings = oldUISettings->Clone(); + if (clonedSettings != NULL) + settings.AddUISettings(clonedSettings); + } + } locker.Unlock(); // save the settings Modified: haiku/trunk/src/apps/debugger/TeamDebugger.h =================================================================== --- haiku/trunk/src/apps/debugger/TeamDebugger.h 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/TeamDebugger.h 2011-11-02 19:04:24 UTC (rev 43121) @@ -13,6 +13,7 @@ #include "DebugEvent.h" #include "Team.h" +#include "TeamSettings.h" #include "ThreadHandler.h" #include "UserInterface.h" #include "Worker.h" @@ -155,6 +156,7 @@ UserInterface* fUserInterface; volatile bool fTerminating; bool fKillTeamOnQuit; + TeamSettings fTeamSettings; }; Modified: haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp =================================================================== --- haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/settings/TeamSettings.cpp 2011-11-02 19:04:24 UTC (rev 43121) @@ -100,7 +100,7 @@ return error; } } - + // add UI settings for (int32 i = 0; archive.FindMessage("uisettings", i, &childArchive) == B_OK; i++) { @@ -111,7 +111,7 @@ if (error != B_OK) { delete setting; return error; - } + } } return B_OK; @@ -136,13 +136,13 @@ if (error != B_OK) return error; } - + for (int32 i = 0; TeamUISettings* uiSetting = fUISettings.ItemAt(i); i++) { error = uiSetting->WriteTo(childArchive); if (error != B_OK) return error; - + error = archive.AddMessage("uisettings", &childArchive); if (error != B_OK) return error; @@ -180,6 +180,29 @@ } +const TeamUISettings* +TeamSettings::UISettingFor(const char* id) const +{ + for (int32 i = 0; i < fUISettings.CountItems(); i++) { + TeamUISettings* settings = fUISettings.ItemAt(i); + if (strcmp(settings->ID(), id) == 0) + return settings; + } + + return NULL; +} + + +status_t +TeamSettings::AddUISettings(TeamUISettings* settings) +{ + if (!fUISettings.AddItem(settings)) + return B_NO_MEMORY; + + return B_OK; +} + + TeamSettings& TeamSettings::operator=(const TeamSettings& other) { @@ -221,7 +244,7 @@ i++) { delete breakpoint; } - + for (int32 i = 0; TeamUISettings* uiSetting = fUISettings.ItemAt(i); i++) delete uiSetting; Modified: haiku/trunk/src/apps/debugger/settings/TeamSettings.h =================================================================== --- haiku/trunk/src/apps/debugger/settings/TeamSettings.h 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/settings/TeamSettings.h 2011-11-02 19:04:24 UTC (rev 43121) @@ -32,9 +32,11 @@ int32 CountBreakpoints() const; const BreakpointSetting* BreakpointAt(int32 index) const; - + int32 CountUISettings() const; const TeamUISettings* UISettingAt(int32 index) const; + const TeamUISettings* UISettingFor(const char* id) const; + status_t AddUISettings(TeamUISettings* settings); TeamSettings& operator=(const TeamSettings& other); // throws std::bad_alloc Modified: haiku/trunk/src/apps/debugger/user_interface/UserInterface.h =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/UserInterface.h 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/user_interface/UserInterface.h 2011-11-02 19:04:24 UTC (rev 43121) @@ -19,6 +19,7 @@ class Image; class StackFrame; class Team; +class TeamUISettings; class Thread; class TypeComponentPath; class UserBreakpoint; @@ -39,6 +40,8 @@ public: virtual ~UserInterface(); + virtual const char* ID() const = 0; + virtual status_t Init(Team* team, UserInterfaceListener* listener) = 0; virtual void Show() = 0; @@ -46,6 +49,11 @@ // shut down the UI *now* -- no more user // feedback + virtual status_t LoadSettings(const TeamUISettings* settings) + = 0; + virtual status_t SaveSettings(TeamUISettings*& settings) + const = 0; + virtual void NotifyUser(const char* title, const char* message, user_notification_type type) = 0; Modified: haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.cpp 2011-11-02 19:04:24 UTC (rev 43121) @@ -1,5 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx + * Copyright 2011, Rene Gollent, rene@xxxxxxxxxxxx * Distributed under the terms of the MIT License. */ @@ -8,6 +9,7 @@ #include <Alert.h> +#include "GUITeamUISettings.h" #include "TeamWindow.h" #include "Tracing.h" @@ -26,6 +28,13 @@ } +const char* +GraphicalUserInterface::ID() const +{ + return "GraphicalUserInterface"; +} + + status_t GraphicalUserInterface::Init(Team* team, UserInterfaceListener* listener) { @@ -58,6 +67,28 @@ } +status_t +GraphicalUserInterface::LoadSettings(const TeamUISettings* settings) +{ + // TODO: restore settings + + return B_OK; +} + + +status_t +GraphicalUserInterface::SaveSettings(TeamUISettings*& settings) const +{ + settings = new(std::nothrow) GUITeamUISettings(ID()); + if (settings == NULL) + return B_NO_MEMORY; + + // TODO: fill in settings + + return B_OK; +} + + void GraphicalUserInterface::NotifyUser(const char* title, const char* message, user_notification_type type) Modified: haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h =================================================================== --- haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h 2011-11-02 16:29:05 UTC (rev 43120) +++ haiku/trunk/src/apps/debugger/user_interface/gui/GraphicalUserInterface.h 2011-11-02 19:04:24 UTC (rev 43121) @@ -18,6 +18,8 @@ GraphicalUserInterface(); virtual ~GraphicalUserInterface(); + virtual const char* ID() const; + virtual status_t Init(Team* team, UserInterfaceListener* listener); virtual void Show(); @@ -25,6 +27,9 @@ // shut down the UI *now* -- no more user // feedback + virtual status_t LoadSettings(const TeamUISettings* settings); + virtual status_t SaveSettings(TeamUISettings*& settings) const; + virtual void NotifyUser(const char* title, const char* message, user_notification_type type);