1/*
2 * Copyright 2002-2011, Haiku. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		DarkWyrm (darkwyrm@earthlink.net)
7 *		Alexander von Gluck, kallisti5@unixzen.com
8 *		Stephan A��mus <superstippi@gmx.de>
9 */
10
11
12#include "APRWindow.h"
13
14#include <Button.h>
15#include <Catalog.h>
16#include <GroupLayoutBuilder.h>
17#include <Locale.h>
18#include <Messenger.h>
19#include <SpaceLayoutItem.h>
20#include <TabView.h>
21
22#include "AntialiasingSettingsView.h"
23#include "APRView.h"
24#include "defs.h"
25#include "FontView.h"
26#include "LookAndFeelSettingsView.h"
27
28
29#undef B_TRANSLATION_CONTEXT
30#define B_TRANSLATION_CONTEXT "APRWindow"
31
32
33static const uint32 kMsgSetDefaults = 'dflt';
34static const uint32 kMsgRevert = 'rvrt';
35
36
37APRWindow::APRWindow(BRect frame)
38	:
39	BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Appearance"), B_TITLED_WINDOW,
40		B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS
41			| B_QUIT_ON_WINDOW_CLOSE, B_ALL_WORKSPACES)
42{
43	SetLayout(new BGroupLayout(B_HORIZONTAL));
44
45	fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"),
46		new BMessage(kMsgSetDefaults), B_WILL_DRAW);
47
48	fRevertButton = new BButton("revert", B_TRANSLATE("Revert"),
49		new BMessage(kMsgRevert), B_WILL_DRAW);
50
51	BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL);
52
53	fFontSettings = new FontView(B_TRANSLATE("Fonts"));
54
55	fColorsView = new APRView(B_TRANSLATE("Colors"));
56
57	fLookAndFeelSettings = new LookAndFeelSettingsView(
58		B_TRANSLATE("Look and feel"));
59
60	fAntialiasingSettings = new AntialiasingSettingsView(
61		B_TRANSLATE("Antialiasing"));
62
63	tabView->AddTab(fFontSettings);
64	tabView->AddTab(fColorsView);
65	tabView->AddTab(fLookAndFeelSettings);
66	tabView->AddTab(fAntialiasingSettings);
67
68	_UpdateButtons();
69
70	AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
71		.Add(tabView)
72		.Add(BSpaceLayoutItem::CreateVerticalStrut(5))
73		.Add(BGroupLayoutBuilder(B_HORIZONTAL)
74			.Add(fRevertButton)
75			.AddGlue()
76			.Add(fDefaultsButton)
77		)
78		.SetInsets(5, 5, 5, 5)
79	);
80}
81
82
83void
84APRWindow::MessageReceived(BMessage *message)
85{
86	switch (message->what) {
87		case kMsgUpdate:
88			_UpdateButtons();
89			break;
90
91		case kMsgSetDefaults:
92			fFontSettings->SetDefaults();
93			fColorsView->SetDefaults();
94			fLookAndFeelSettings->SetDefaults();
95			fAntialiasingSettings->SetDefaults();
96
97			_UpdateButtons();
98			break;
99
100		case kMsgRevert:
101			fColorsView->Revert();
102			fAntialiasingSettings->Revert();
103			fLookAndFeelSettings->Revert();
104			fFontSettings->Revert();
105
106			_UpdateButtons();
107			break;
108
109		default:
110			BWindow::MessageReceived(message);
111			break;
112	}
113}
114
115
116void
117APRWindow::_UpdateButtons()
118{
119	fDefaultsButton->SetEnabled(_IsDefaultable());
120	fRevertButton->SetEnabled(_IsRevertable());
121}
122
123
124bool
125APRWindow::_IsDefaultable() const
126{
127//	printf("fonts defaultable: %d\n", fFontSettings->IsDefaultable());
128//	printf("colors defaultable: %d\n", fColorsView->IsDefaultable());
129//	printf("AA defaultable: %d\n", fAntialiasingSettings->IsDefaultable());
130//	printf("decor defaultable: %d\n", fLookAndFeelSettings->IsDefaultable());
131	return fFontSettings->IsDefaultable()
132		|| fColorsView->IsDefaultable()
133		|| fLookAndFeelSettings->IsDefaultable()
134		|| fAntialiasingSettings->IsDefaultable();
135}
136
137
138bool
139APRWindow::_IsRevertable() const
140{
141//	printf("fonts revertable: %d\n", fFontSettings->IsRevertable());
142//	printf("colors revertable: %d\n", fColorsView->IsRevertable());
143//	printf("AA revertable: %d\n", fAntialiasingSettings->IsRevertable());
144//	printf("decor revertable: %d\n", fLookAndFeelSettings->IsRevertable());
145	return fFontSettings->IsRevertable()
146		|| fColorsView->IsRevertable()
147		|| fLookAndFeelSettings->IsRevertable()
148		|| fAntialiasingSettings->IsRevertable();
149}
150