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 "CoreFileDebuggerInterface.h"
|
||||||
#include "CommandLineUserInterface.h"
|
#include "CommandLineUserInterface.h"
|
||||||
#include "DebuggerInterface.h"
|
#include "DebuggerInterface.h"
|
||||||
|
#include "DebuggerUiSettingsFactory.h"
|
||||||
#include "GraphicalUserInterface.h"
|
#include "GraphicalUserInterface.h"
|
||||||
#include "ImageDebugLoadingStateHandlerRoster.h"
|
#include "ImageDebugLoadingStateHandlerRoster.h"
|
||||||
#include "MessageCodes.h"
|
#include "MessageCodes.h"
|
||||||
@@ -233,7 +234,11 @@ parse_arguments(int argc, const char* const* argv, bool noOutput,
|
|||||||
static status_t
|
static status_t
|
||||||
global_init(TargetHostInterfaceRoster::Listener* listener)
|
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)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
@@ -331,6 +336,7 @@ Debugger::Debugger()
|
|||||||
|
|
||||||
Debugger::~Debugger()
|
Debugger::~Debugger()
|
||||||
{
|
{
|
||||||
|
DebuggerUiSettingsFactory::DeleteDefault();
|
||||||
ValueHandlerRoster::DeleteDefault();
|
ValueHandlerRoster::DeleteDefault();
|
||||||
TypeHandlerRoster::DeleteDefault();
|
TypeHandlerRoster::DeleteDefault();
|
||||||
ImageDebugLoadingStateHandlerRoster::DeleteDefault();
|
ImageDebugLoadingStateHandlerRoster::DeleteDefault();
|
||||||
@@ -345,7 +351,7 @@ Debugger::Init()
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
return fSettingsManager.Init();
|
return fSettingsManager.Init(DebuggerUiSettingsFactory::Default());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -656,7 +662,7 @@ CliDebugger::Run(const Options& options)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsManager settingsManager;
|
SettingsManager settingsManager;
|
||||||
error = settingsManager.Init();
|
error = settingsManager.Init(DebuggerUiSettingsFactory::Default());
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
fprintf(stderr, "Error: Settings manager initialization failed: "
|
fprintf(stderr, "Error: Settings manager initialization failed: "
|
||||||
"%s\n", strerror(error));
|
"%s\n", strerror(error));
|
||||||
@@ -724,7 +730,7 @@ ReportDebugger::Run(const Options& options)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SettingsManager settingsManager;
|
SettingsManager settingsManager;
|
||||||
error = settingsManager.Init();
|
error = settingsManager.Init(DebuggerUiSettingsFactory::Default());
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
fprintf(stderr, "Error: Settings manager initialization failed: "
|
fprintf(stderr, "Error: Settings manager initialization failed: "
|
||||||
"%s\n", strerror(error));
|
"%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 expression_eval_window ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui inspector_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 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_window ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui team_settings_window ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui team_settings_window ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui teams_window ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui teams_window ] ;
|
||||||
@@ -216,7 +217,6 @@ local sources =
|
|||||||
|
|
||||||
# settings
|
# settings
|
||||||
BreakpointSetting.cpp
|
BreakpointSetting.cpp
|
||||||
GuiTeamUiSettings.cpp
|
|
||||||
SettingsManager.cpp
|
SettingsManager.cpp
|
||||||
TeamFileManagerSettings.cpp
|
TeamFileManagerSettings.cpp
|
||||||
TeamSettings.cpp
|
TeamSettings.cpp
|
||||||
@@ -296,6 +296,10 @@ local sources =
|
|||||||
InspectorWindow.cpp
|
InspectorWindow.cpp
|
||||||
MemoryView.cpp
|
MemoryView.cpp
|
||||||
|
|
||||||
|
# user_interface/gui/settings
|
||||||
|
DebuggerUiSettingsFactory.cpp
|
||||||
|
GuiTeamUiSettings.cpp
|
||||||
|
|
||||||
# user_interface/gui/teams_window
|
# user_interface/gui/teams_window
|
||||||
TeamsWindow.cpp
|
TeamsWindow.cpp
|
||||||
TeamsListView.cpp
|
TeamsListView.cpp
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ static const int32 kMaxRecentTeamSettings = 10;
|
|||||||
SettingsManager::SettingsManager()
|
SettingsManager::SettingsManager()
|
||||||
:
|
:
|
||||||
fLock("settings manager"),
|
fLock("settings manager"),
|
||||||
fRecentTeamSettings(kMaxRecentTeamSettings, true)
|
fRecentTeamSettings(kMaxRecentTeamSettings, true),
|
||||||
|
fUiSettingsFactory(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,13 +39,15 @@ SettingsManager::~SettingsManager()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
SettingsManager::Init()
|
SettingsManager::Init(TeamUiSettingsFactory* factory)
|
||||||
{
|
{
|
||||||
// check the lock
|
// check the lock
|
||||||
status_t error = fLock.InitCheck();
|
status_t error = fLock.InitCheck();
|
||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
fUiSettingsFactory = factory;
|
||||||
|
|
||||||
// get and create our settings directory
|
// get and create our settings directory
|
||||||
if (find_directory(B_USER_SETTINGS_DIRECTORY, &fSettingsPath, true) == B_OK
|
if (find_directory(B_USER_SETTINGS_DIRECTORY, &fSettingsPath, true) == B_OK
|
||||||
&& fSettingsPath.Append(kSettingsDirPath) == B_OK
|
&& fSettingsPath.Append(kSettingsDirPath) == B_OK
|
||||||
@@ -147,7 +150,7 @@ SettingsManager::_LoadSettings()
|
|||||||
if (settings == NULL)
|
if (settings == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
error = settings->SetTo(childArchive);
|
error = settings->SetTo(childArchive, *fUiSettingsFactory);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
delete settings;
|
delete settings;
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class TeamSettings;
|
class TeamSettings;
|
||||||
|
class TeamUiSettingsFactory;
|
||||||
|
|
||||||
|
|
||||||
class SettingsManager {
|
class SettingsManager {
|
||||||
@@ -20,7 +21,7 @@ public:
|
|||||||
SettingsManager();
|
SettingsManager();
|
||||||
~SettingsManager();
|
~SettingsManager();
|
||||||
|
|
||||||
status_t Init();
|
status_t Init(TeamUiSettingsFactory* factory);
|
||||||
|
|
||||||
status_t LoadTeamSettings(const char* teamName,
|
status_t LoadTeamSettings(const char* teamName,
|
||||||
TeamSettings& settings);
|
TeamSettings& settings);
|
||||||
@@ -41,6 +42,7 @@ private:
|
|||||||
BLocker fLock;
|
BLocker fLock;
|
||||||
BPath fSettingsPath;
|
BPath fSettingsPath;
|
||||||
TeamSettingsList fRecentTeamSettings; // oldest is first
|
TeamSettingsList fRecentTeamSettings; // oldest is first
|
||||||
|
TeamUiSettingsFactory* fUiSettingsFactory;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ TeamSettings::SetTo(Team* team)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
TeamSettings::SetTo(const BMessage& archive)
|
TeamSettings::SetTo(const BMessage& archive,
|
||||||
|
const TeamUiSettingsFactory& factory)
|
||||||
{
|
{
|
||||||
_Unset();
|
_Unset();
|
||||||
|
|
||||||
@@ -127,7 +128,7 @@ TeamSettings::SetTo(const BMessage& archive)
|
|||||||
for (int32 i = 0; archive.FindMessage("uisettings", i, &childArchive)
|
for (int32 i = 0; archive.FindMessage("uisettings", i, &childArchive)
|
||||||
== B_OK; i++) {
|
== B_OK; i++) {
|
||||||
TeamUiSettings* setting = NULL;
|
TeamUiSettings* setting = NULL;
|
||||||
error = TeamUiSettingsFactory::Create(childArchive, setting);
|
error = factory.Create(childArchive, setting);
|
||||||
if (error == B_OK && !fUiSettings.AddItem(setting))
|
if (error == B_OK && !fUiSettings.AddItem(setting))
|
||||||
error = B_NO_MEMORY;
|
error = B_NO_MEMORY;
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class Team;
|
|||||||
class TeamFileManagerSettings;
|
class TeamFileManagerSettings;
|
||||||
class TeamSignalSettings;
|
class TeamSignalSettings;
|
||||||
class TeamUiSettings;
|
class TeamUiSettings;
|
||||||
|
class TeamUiSettingsFactory;
|
||||||
|
|
||||||
|
|
||||||
class TeamSettings {
|
class TeamSettings {
|
||||||
@@ -28,7 +29,8 @@ public:
|
|||||||
~TeamSettings();
|
~TeamSettings();
|
||||||
|
|
||||||
status_t SetTo(Team* team);
|
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;
|
status_t WriteTo(BMessage& archive) const;
|
||||||
|
|
||||||
const BString& TeamName() const { return fTeamName; }
|
const BString& TeamName() const { return fTeamName; }
|
||||||
|
|||||||
@@ -6,52 +6,7 @@
|
|||||||
|
|
||||||
#include "TeamUiSettingsFactory.h"
|
#include "TeamUiSettingsFactory.h"
|
||||||
|
|
||||||
#include <Message.h>
|
|
||||||
|
|
||||||
#include "GuiTeamUiSettings.h"
|
|
||||||
|
|
||||||
|
|
||||||
TeamUiSettingsFactory::TeamUiSettingsFactory()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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 {
|
class TeamUiSettingsFactory {
|
||||||
public:
|
public:
|
||||||
TeamUiSettingsFactory();
|
virtual ~TeamUiSettingsFactory();
|
||||||
~TeamUiSettingsFactory();
|
|
||||||
|
|
||||||
static status_t Create(const BMessage& archive,
|
virtual status_t Create(const BMessage& archive,
|
||||||
TeamUiSettings*& settings);
|
TeamUiSettings*& settings) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TEAM_UI_SETTINGS_FACTORY_H
|
#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