Debugger: Reorganize settings classes.

- Refactor TeamUiSettingsFactory into an abstract base class with implementing
  subclass DebuggerUiSettingsFactory.
- Adjust SettingsManager to expect the UiSettingsFactory to be passed in as an
  initialization parameter, and refactor accordingly.
- Move GuiTeamUiSettings.* into a user_interface/gui subfolder.

No functional change, simply reorganization towards splitting the debugger's
core functionality into a separate library from the application to aid in
sharing with remote_debug_server.
This commit is contained in:
Rene Gollent
2016-05-22 15:57:12 -04:00
parent 880a646413
commit ec60909a20
12 changed files with 149 additions and 62 deletions
+10 -4
View File
@@ -26,6 +26,7 @@
#include "CoreFileDebuggerInterface.h"
#include "CommandLineUserInterface.h"
#include "DebuggerInterface.h"
#include "DebuggerUiSettingsFactory.h"
#include "GraphicalUserInterface.h"
#include "ImageDebugLoadingStateHandlerRoster.h"
#include "MessageCodes.h"
@@ -233,7 +234,11 @@ parse_arguments(int argc, const char* const* argv, bool noOutput,
static status_t
global_init(TargetHostInterfaceRoster::Listener* listener)
{
status_t error = TypeHandlerRoster::CreateDefault();
status_t error = DebuggerUiSettingsFactory::CreateDefault();
if (error != B_OK)
return error;
error = TypeHandlerRoster::CreateDefault();
if (error != B_OK)
return error;
@@ -331,6 +336,7 @@ Debugger::Debugger()
Debugger::~Debugger()
{
DebuggerUiSettingsFactory::DeleteDefault();
ValueHandlerRoster::DeleteDefault();
TypeHandlerRoster::DeleteDefault();
ImageDebugLoadingStateHandlerRoster::DeleteDefault();
@@ -345,7 +351,7 @@ Debugger::Init()
if (error != B_OK)
return error;
return fSettingsManager.Init();
return fSettingsManager.Init(DebuggerUiSettingsFactory::Default());
}
@@ -656,7 +662,7 @@ CliDebugger::Run(const Options& options)
}
SettingsManager settingsManager;
error = settingsManager.Init();
error = settingsManager.Init(DebuggerUiSettingsFactory::Default());
if (error != B_OK) {
fprintf(stderr, "Error: Settings manager initialization failed: "
"%s\n", strerror(error));
@@ -724,7 +730,7 @@ ReportDebugger::Run(const Options& options)
}
SettingsManager settingsManager;
error = settingsManager.Init();
error = settingsManager.Init(DebuggerUiSettingsFactory::Default());
if (error != B_OK) {
fprintf(stderr, "Error: Settings manager initialization failed: "
"%s\n", strerror(error));
+5 -1
View File
@@ -44,6 +44,7 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui expression_eval_window ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui inspector_window ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui model ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui settings ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui team_window ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui team_settings_window ] ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui teams_window ] ;
@@ -216,7 +217,6 @@ local sources =
# settings
BreakpointSetting.cpp
GuiTeamUiSettings.cpp
SettingsManager.cpp
TeamFileManagerSettings.cpp
TeamSettings.cpp
@@ -296,6 +296,10 @@ local sources =
InspectorWindow.cpp
MemoryView.cpp
# user_interface/gui/settings
DebuggerUiSettingsFactory.cpp
GuiTeamUiSettings.cpp
# user_interface/gui/teams_window
TeamsWindow.cpp
TeamsListView.cpp
@@ -26,7 +26,8 @@ static const int32 kMaxRecentTeamSettings = 10;
SettingsManager::SettingsManager()
:
fLock("settings manager"),
fRecentTeamSettings(kMaxRecentTeamSettings, true)
fRecentTeamSettings(kMaxRecentTeamSettings, true),
fUiSettingsFactory(NULL)
{
}
@@ -38,13 +39,15 @@ SettingsManager::~SettingsManager()
status_t
SettingsManager::Init()
SettingsManager::Init(TeamUiSettingsFactory* factory)
{
// check the lock
status_t error = fLock.InitCheck();
if (error != B_OK)
return error;
fUiSettingsFactory = factory;
// get and create our settings directory
if (find_directory(B_USER_SETTINGS_DIRECTORY, &fSettingsPath, true) == B_OK
&& fSettingsPath.Append(kSettingsDirPath) == B_OK
@@ -147,7 +150,7 @@ SettingsManager::_LoadSettings()
if (settings == NULL)
return B_NO_MEMORY;
error = settings->SetTo(childArchive);
error = settings->SetTo(childArchive, *fUiSettingsFactory);
if (error != B_OK) {
delete settings;
continue;
+3 -1
View File
@@ -13,6 +13,7 @@
class TeamSettings;
class TeamUiSettingsFactory;
class SettingsManager {
@@ -20,7 +21,7 @@ public:
SettingsManager();
~SettingsManager();
status_t Init();
status_t Init(TeamUiSettingsFactory* factory);
status_t LoadTeamSettings(const char* teamName,
TeamSettings& settings);
@@ -41,6 +42,7 @@ private:
BLocker fLock;
BPath fSettingsPath;
TeamSettingsList fRecentTeamSettings; // oldest is first
TeamUiSettingsFactory* fUiSettingsFactory;
};
+3 -2
View File
@@ -97,7 +97,8 @@ TeamSettings::SetTo(Team* team)
status_t
TeamSettings::SetTo(const BMessage& archive)
TeamSettings::SetTo(const BMessage& archive,
const TeamUiSettingsFactory& factory)
{
_Unset();
@@ -127,7 +128,7 @@ TeamSettings::SetTo(const BMessage& archive)
for (int32 i = 0; archive.FindMessage("uisettings", i, &childArchive)
== B_OK; i++) {
TeamUiSettings* setting = NULL;
error = TeamUiSettingsFactory::Create(childArchive, setting);
error = factory.Create(childArchive, setting);
if (error == B_OK && !fUiSettings.AddItem(setting))
error = B_NO_MEMORY;
if (error != B_OK) {
+3 -1
View File
@@ -18,6 +18,7 @@ class Team;
class TeamFileManagerSettings;
class TeamSignalSettings;
class TeamUiSettings;
class TeamUiSettingsFactory;
class TeamSettings {
@@ -28,7 +29,8 @@ public:
~TeamSettings();
status_t SetTo(Team* team);
status_t SetTo(const BMessage& archive);
status_t SetTo(const BMessage& archive,
const TeamUiSettingsFactory& factory);
status_t WriteTo(BMessage& archive) const;
const BString& TeamName() const { return fTeamName; }
@@ -6,52 +6,7 @@
#include "TeamUiSettingsFactory.h"
#include <Message.h>
#include "GuiTeamUiSettings.h"
TeamUiSettingsFactory::TeamUiSettingsFactory()
{
}
TeamUiSettingsFactory::~TeamUiSettingsFactory()
{
}
status_t
TeamUiSettingsFactory::Create(const BMessage& archive,
TeamUiSettings*& settings)
{
int32 type;
status_t error = archive.FindInt32("type", &type);
if (error != B_OK)
return error;
switch (type) {
case TEAM_UI_SETTINGS_TYPE_GUI:
settings = new(std::nothrow) GuiTeamUiSettings();
if (settings == NULL)
return B_NO_MEMORY;
error = settings->SetTo(archive);
if (error != B_OK) {
delete settings;
settings = NULL;
return error;
}
break;
case TEAM_UI_SETTINGS_TYPE_CLI:
// TODO: implement once we have a CLI interface
// (and corresponding settings)
return B_UNSUPPORTED;
default:
return B_BAD_DATA;
}
return B_OK;
}
@@ -14,11 +14,10 @@ class TeamUiSettings;
class TeamUiSettingsFactory {
public:
TeamUiSettingsFactory();
~TeamUiSettingsFactory();
static status_t Create(const BMessage& archive,
TeamUiSettings*& settings);
virtual ~TeamUiSettingsFactory();
virtual status_t Create(const BMessage& archive,
TeamUiSettings*& settings) const = 0;
};
#endif // TEAM_UI_SETTINGS_FACTORY_H
@@ -0,0 +1,86 @@
/*
* Copyright 2011-2016, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#include "DebuggerUiSettingsFactory.h"
#include <Message.h>
#include "GuiTeamUiSettings.h"
DebuggerUiSettingsFactory* DebuggerUiSettingsFactory::sDefaultInstance = NULL;
DebuggerUiSettingsFactory::DebuggerUiSettingsFactory()
{
}
DebuggerUiSettingsFactory::~DebuggerUiSettingsFactory()
{
}
DebuggerUiSettingsFactory*
DebuggerUiSettingsFactory::Default()
{
return sDefaultInstance;
}
status_t
DebuggerUiSettingsFactory::CreateDefault()
{
sDefaultInstance = new(std::nothrow) DebuggerUiSettingsFactory();
if (sDefaultInstance == NULL)
return B_NO_MEMORY;
return B_OK;
}
void
DebuggerUiSettingsFactory::DeleteDefault()
{
delete sDefaultInstance;
sDefaultInstance = NULL;
}
status_t
DebuggerUiSettingsFactory::Create(const BMessage& archive,
TeamUiSettings*& settings) const
{
int32 type;
status_t error = archive.FindInt32("type", &type);
if (error != B_OK)
return error;
switch (type) {
case TEAM_UI_SETTINGS_TYPE_GUI:
settings = new(std::nothrow) GuiTeamUiSettings();
if (settings == NULL)
return B_NO_MEMORY;
error = settings->SetTo(archive);
if (error != B_OK) {
delete settings;
settings = NULL;
return error;
}
break;
case TEAM_UI_SETTINGS_TYPE_CLI:
// TODO: implement once we have a CLI interface
// (and corresponding settings)
return B_UNSUPPORTED;
default:
return B_BAD_DATA;
}
return B_OK;
}
@@ -0,0 +1,29 @@
/*
* Copyright 2011-2016, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#ifndef DEBUGGER_UI_SETTINGS_FACTORY_H
#define DEBUGGER_UI_SETTINGS_FACTORY_H
#include "TeamUiSettingsFactory.h"
class DebuggerUiSettingsFactory : public TeamUiSettingsFactory {
public:
static DebuggerUiSettingsFactory* Default();
static status_t CreateDefault();
static void DeleteDefault();
virtual status_t Create(const BMessage& archive,
TeamUiSettings*& settings) const;
private:
DebuggerUiSettingsFactory();
virtual ~DebuggerUiSettingsFactory();
static DebuggerUiSettingsFactory* sDefaultInstance;
};
#endif // DEBUGGER_UI_SETTINGS_FACTORY_H