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:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user