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