1/*
2 * Copyright 2002-2009 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel D��rfler, axeld@pinc-software.de
7 *		Jerome Duval, jerome.duval@free.fr
8 */
9
10
11#include <Application.h>
12#include <Catalog.h>
13#include <LayoutBuilder.h>
14#include <Locale.h>
15#include <TrackerAddOnAppLaunch.h>
16#include <Window.h>
17
18#include "BackgroundsView.h"
19
20
21#undef B_TRANSLATION_CONTEXT
22#define B_TRANSLATION_CONTEXT "Main Window"
23
24
25static const char* kSignature = "application/x-vnd.Haiku-Backgrounds";
26
27
28class BackgroundsWindow : public BWindow {
29public:
30							BackgroundsWindow();
31
32			void			RefsReceived(BMessage* message);
33
34protected:
35	virtual	bool			QuitRequested();
36	virtual	void			WorkspaceActivated(int32 oldWorkspaces,
37								bool active);
38
39			BackgroundsView*	fBackgroundsView;
40};
41
42
43class BackgroundsApplication : public BApplication {
44public:
45							BackgroundsApplication();
46	virtual	void			MessageReceived(BMessage* message);
47	virtual	void			RefsReceived(BMessage* message);
48
49private:
50			BackgroundsWindow*	fWindow;
51};
52
53
54//	#pragma mark - BackgroundsApplication
55
56
57BackgroundsApplication::BackgroundsApplication()
58	:
59	BApplication(kSignature),
60	fWindow(NULL)
61{
62	fWindow = new BackgroundsWindow();
63	fWindow->Show();
64}
65
66
67void
68BackgroundsApplication::MessageReceived(BMessage* message)
69{
70	const void *data;
71	ssize_t size;
72
73	if (message->WasDropped() && message->FindData("RGBColor", B_RGB_COLOR_TYPE,
74			&data, &size) == B_OK) {
75		// This is the desktop telling us that it was changed by a color drop
76		BMessenger(fWindow).SendMessage(message);
77		return;
78	}
79	switch (message->what) {
80		case B_SILENT_RELAUNCH:
81			fWindow->Activate();
82			break;
83		default:
84			BApplication::MessageReceived(message);
85			break;
86	}
87}
88
89
90void
91BackgroundsApplication::RefsReceived(BMessage* message)
92{
93	fWindow->RefsReceived(message);
94}
95
96
97//	#pragma mark - BackgroundsWindow
98
99
100BackgroundsWindow::BackgroundsWindow()
101	:
102	BWindow(BRect(0, 0, 0, 0), B_TRANSLATE_SYSTEM_NAME("Backgrounds"),
103		B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE
104			| B_AUTO_UPDATE_SIZE_LIMITS,
105		B_ALL_WORKSPACES)
106{
107	fBackgroundsView = new BackgroundsView();
108
109	BLayoutBuilder::Group<>(this)
110		.AddGroup(B_HORIZONTAL, 0)
111			.Add(fBackgroundsView)
112			.End()
113		.End();
114
115	if (!fBackgroundsView->FoundPositionSetting())
116		CenterOnScreen();
117}
118
119
120void
121BackgroundsWindow::RefsReceived(BMessage* message)
122{
123	fBackgroundsView->RefsReceived(message);
124	Activate();
125}
126
127
128bool
129BackgroundsWindow::QuitRequested()
130{
131	fBackgroundsView->SaveSettings();
132	be_app->PostMessage(B_QUIT_REQUESTED);
133
134	return true;
135}
136
137
138void
139BackgroundsWindow::WorkspaceActivated(int32 oldWorkspaces, bool active)
140{
141	fBackgroundsView->WorkspaceActivated(oldWorkspaces, active);
142}
143
144
145//	#pragma mark - main method
146
147
148int
149main(int argc, char** argv)
150{
151	BackgroundsApplication app;
152	app.Run();
153	return 0;
154}
155