1/*
2 * Copyright 2011-2016, Rene Gollent, rene@gollent.com.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "DebuggerUiSettingsFactory.h"
8
9#include <Message.h>
10
11#include "GuiTeamUiSettings.h"
12
13
14DebuggerUiSettingsFactory* DebuggerUiSettingsFactory::sDefaultInstance = NULL;
15
16
17DebuggerUiSettingsFactory::DebuggerUiSettingsFactory()
18{
19}
20
21
22DebuggerUiSettingsFactory::~DebuggerUiSettingsFactory()
23{
24}
25
26
27DebuggerUiSettingsFactory*
28DebuggerUiSettingsFactory::Default()
29{
30	return sDefaultInstance;
31}
32
33
34status_t
35DebuggerUiSettingsFactory::CreateDefault()
36{
37	sDefaultInstance = new(std::nothrow) DebuggerUiSettingsFactory();
38	if (sDefaultInstance == NULL)
39		return B_NO_MEMORY;
40
41	return B_OK;
42}
43
44
45void
46DebuggerUiSettingsFactory::DeleteDefault()
47{
48	delete sDefaultInstance;
49	sDefaultInstance = NULL;
50}
51
52
53status_t
54DebuggerUiSettingsFactory::Create(const BMessage& archive,
55	TeamUiSettings*& settings) const
56{
57	int32 type;
58	status_t error = archive.FindInt32("type", &type);
59	if (error != B_OK)
60		return error;
61
62	switch (type) {
63		case TEAM_UI_SETTINGS_TYPE_GUI:
64			settings = new(std::nothrow) GuiTeamUiSettings();
65			if (settings == NULL)
66				return B_NO_MEMORY;
67
68			error = settings->SetTo(archive);
69			if (error != B_OK) {
70				delete settings;
71				settings = NULL;
72				return error;
73			}
74			break;
75
76		case TEAM_UI_SETTINGS_TYPE_CLI:
77			// TODO: implement once we have a CLI interface
78			// (and corresponding settings)
79			return B_UNSUPPORTED;
80
81		default:
82			return B_BAD_DATA;
83	}
84
85	return B_OK;
86}
87