Application.h revision 1480e5da
1/*
2 * Copyright 2001-2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _APPLICATION_H
6#define _APPLICATION_H
7
8
9#include <AppDefs.h>
10#include <InterfaceDefs.h>
11#include <Looper.h>
12#include <Messenger.h>
13#include <Point.h>
14#include <Rect.h>
15
16
17class BCursor;
18class BList;
19class BLocker;
20class BMessageRunner;
21class BResources;
22class BServer;
23class BWindow;
24
25struct app_info;
26
27
28namespace BPrivate {
29	class PortLink;
30	class ServerMemoryAllocator;
31}
32
33
34class BApplication : public BLooper {
35public:
36								BApplication(const char* signature);
37								BApplication(const char* signature,
38									status_t* error);
39	virtual						~BApplication();
40
41	// Archiving
42								BApplication(BMessage* data);
43	static	BArchivable*		Instantiate(BMessage* data);
44	virtual	status_t			Archive(BMessage* data, bool deep = true) const;
45
46			status_t			InitCheck() const;
47
48	// App control and System Message handling
49	virtual	thread_id			Run();
50	virtual	void				Quit();
51	virtual bool				QuitRequested();
52	virtual	void				Pulse();
53	virtual	void				ReadyToRun();
54	virtual	void				MessageReceived(BMessage* message);
55	virtual	void				ArgvReceived(int32 argc, char** argv);
56	virtual	void				AppActivated(bool active);
57	virtual	void				RefsReceived(BMessage* message);
58	virtual	void				AboutRequested();
59
60	// Scripting
61	virtual BHandler*			ResolveSpecifier(BMessage* message, int32 index,
62									BMessage* specifier, int32 form,
63									const char* property);
64
65	// Cursor control, window/looper list, and app info
66			void				ShowCursor();
67			void				HideCursor();
68			void				ObscureCursor();
69			bool				IsCursorHidden() const;
70			void				SetCursor(const void* cursor);
71			void				SetCursor(const BCursor* cursor,
72									bool sync = true);
73
74			int32				CountWindows() const;
75			BWindow*			WindowAt(int32 index) const;
76
77			int32				CountLoopers() const;
78			BLooper*			LooperAt(int32 index) const;
79			bool				IsLaunching() const;
80			const char*			Signature() const;
81			status_t			GetAppInfo(app_info* info) const;
82	static	BResources*			AppResources();
83
84	virtual	void				DispatchMessage(BMessage* message,
85									BHandler* handler);
86			void				SetPulseRate(bigtime_t rate);
87
88	// More scripting
89	virtual status_t			GetSupportedSuites(BMessage* data);
90
91
92	// Private or reserved
93	virtual status_t			Perform(perform_code d, void* arg);
94
95	class Private;
96
97private:
98	typedef BLooper _inherited;
99
100	friend class Private;
101	friend class BServer;
102
103								BApplication(const char* signature,
104									const char* looperName, port_id port,
105									bool initGUI, status_t* error);
106								BApplication(uint32 signature);
107								BApplication(const BApplication&);
108			BApplication&		operator=(const BApplication&);
109
110	virtual	void				_ReservedApplication1();
111	virtual	void				_ReservedApplication2();
112	virtual	void				_ReservedApplication3();
113	virtual	void				_ReservedApplication4();
114	virtual	void				_ReservedApplication5();
115	virtual	void				_ReservedApplication6();
116	virtual	void				_ReservedApplication7();
117	virtual	void				_ReservedApplication8();
118
119	virtual	bool				ScriptReceived(BMessage* msg, int32 index,
120									BMessage* specifier, int32 form,
121									const char* property);
122			void				_InitData(const char* signature, bool initGUI,
123									status_t* error);
124			port_id				_GetPort(const char* signature);
125			void				BeginRectTracking(BRect r, bool trackWhole);
126			void				EndRectTracking();
127			status_t			_SetupServerAllocator();
128			status_t			_InitGUIContext();
129			status_t			_ConnectToServer();
130			void				_ReconnectToServer();
131			bool				_QuitAllWindows(bool force);
132			bool				_WindowQuitLoop(bool quitFilePanels,
133									bool force);
134			void				_ArgvReceived(BMessage* message);
135
136			uint32				InitialWorkspace();
137			int32				_CountWindows(bool includeMenus) const;
138			BWindow*			_WindowAt(uint32 index,
139									bool includeMenus) const;
140
141	static	void				_InitAppResources();
142
143private:
144	static	BResources*			sAppResources;
145
146			const char*			fAppName;
147			::BPrivate::PortLink*	fServerLink;
148			::BPrivate::ServerMemoryAllocator* fServerAllocator;
149
150			void*				fCursorData;
151			bigtime_t			fPulseRate;
152			uint32				fInitialWorkspace;
153			BMessageRunner*		fPulseRunner;
154			status_t			fInitError;
155			void*				fServerReadOnlyMemory;
156			uint32				_reserved[12];
157
158			bool				fReadyToRunCalled;
159};
160
161
162// Global Objects
163
164extern BApplication* be_app;
165extern BMessenger be_app_messenger;
166
167
168#endif	// _APPLICATION_H
169