1/*
2 * Copyright 2011, Axel Dörfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "Switcher.h"
8
9#include <stdlib.h>
10
11#include <Application.h>
12#include <Catalog.h>
13
14#include "CaptureWindow.h"
15#include "PanelWindow.h"
16
17
18#undef B_TRANSLATION_CONTEXT
19#define B_TRANSLATION_CONTEXT "Switcher"
20
21
22const char* kSignature = "application/x-vnd.Haiku-Switcher";
23
24
25Switcher::Switcher()
26	:
27	BApplication(kSignature),
28	fOccupiedLocations(0)
29{
30}
31
32
33Switcher::~Switcher()
34{
35}
36
37
38void
39Switcher::ReadyToRun()
40{
41	CaptureWindow* window = new CaptureWindow();
42	window->Run();
43
44	fCaptureMessenger = window;
45}
46
47
48void
49Switcher::MessageReceived(BMessage* message)
50{
51	switch (message->what) {
52		case kMsgLocationTrigger:
53		{
54			uint32 location = (uint32)message->FindInt32("location");
55			if ((location & fOccupiedLocations) == 0) {
56				// TODO: make function configurable
57				uint32 which = kShowApplicationWindows;
58				if ((location & (kTopEdge | kBottomEdge)) != 0)
59					which = kShowApplications;
60
61				new PanelWindow(location, which,
62					(team_id)message->FindInt32("team"));
63				fOccupiedLocations |= location;
64			}
65			break;
66		}
67
68		case kMsgLocationFree:
69		{
70			uint32 location;
71			if (message->FindInt32("location", (int32*)&location) == B_OK)
72				fOccupiedLocations &= ~location;
73			break;
74		}
75
76		case kMsgHideWhenMouseMovedOut:
77			fCaptureMessenger.SendMessage(message);
78			break;
79
80		default:
81			BApplication::MessageReceived(message);
82			break;
83	}
84}
85
86
87//	#pragma mark -
88
89
90int
91main(int /*argc*/, char** /*argv*/)
92{
93	Switcher app;
94	app.Run();
95
96	return 0;
97}
98