xref: /haiku/src/apps/deskbar/BarApp.h (revision 445d4fd926c569e7b9ae28017da86280aaecbae2)
1 /*
2 Open Tracker License
3 
4 Terms and Conditions
5 
6 Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
7 
8 Permission is hereby granted, free of charge, to any person obtaining a copy of
9 this software and associated documentation files (the "Software"), to deal in
10 the Software without restriction, including without limitation the rights to
11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12 of the Software, and to permit persons to whom the Software is furnished to do
13 so, subject to the following conditions:
14 
15 The above copyright notice and this permission notice applies to all licensees
16 and shall be included in all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
23 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 
25 Except as contained in this notice, the name of Be Incorporated shall not be
26 used in advertising or otherwise to promote the sale, use or other dealings in
27 this Software without prior written authorization from Be Incorporated.
28 
29 Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered
30 trademarks of Be Incorporated in the United States and other countries. Other
31 brand product names are registered trademarks or trademarks of their respective
32 holders.
33 All rights reserved.
34 */
35 #ifndef BAR_APP_H
36 #define BAR_APP_H
37 
38 
39 #include <Server.h>
40 
41 #include "BarSettings.h"
42 
43 
44 /* ------------------------------------ */
45 // Private app_server defines that I need to use
46 
47 #define _DESKTOP_W_TYPE_ 1024
48 #define _FLOATER_W_TYPE_ 4
49 #define _STD_W_TYPE_ 0
50 
51 
52 const uint32 kWin95 = 'Bill';
53 const uint32 kAmiga = 'Ncro';
54 const uint32 kMac = 'WcOS';
55 const uint32 kBe = 'Tabs';
56 const uint32 kAlwaysTop = 'TTop';
57 const uint32 kToggleDraggers = 'TDra';
58 const uint32 kUnsubscribe = 'Unsb';
59 const uint32 kAddTeam = 'AdTm';
60 const uint32 kRemoveTeam = 'RmTm';
61 const uint32 kRestart = 'Rtrt';
62 const uint32 kShutDown = 'ShDn';
63 
64 // from roster_private.h
65 const uint32 kShutdownSystem = 301;
66 const uint32 kRebootSystem = 302;
67 const uint32 kSuspendSystem = 304;
68 
69 // icon size constants
70 const int32 kIconPadding = B_USE_SMALL_SPACING;
71 const int32 kMinimumIconSize = 16;
72 const int32 kMaximumIconSize = 96;
73 const int32 kIconSizeInterval = 8;
74 const int32 kIconCacheCount = (kMaximumIconSize - kMinimumIconSize)
75 	/ kIconSizeInterval + 1;
76 
77 // font size constants
78 const int32 kMinimumFontSize = 8;
79 const int32 kMaximumFontSize = 72;
80 const int32 kFontSizeInterval = 1;
81 const int32 kWindowIconCacheCount = (kMaximumFontSize - kMinimumFontSize)
82 	/ kFontSizeInterval + 1;
83 
84 // update preferences message constant
85 const uint32 kUpdatePreferences = 'Pref';
86 
87 // realign replicants message constant
88 const uint32 kRealignReplicants = 'Algn';
89 
90 /* --------------------------------------------- */
91 
92 class BBitmap;
93 class BFile;
94 class BList;
95 class PreferencesWindow;
96 class TBarView;
97 class TBarWindow;
98 
99 
100 class BarTeamInfo {
101 public:
102 									BarTeamInfo(BList* teams, uint32 flags,
103 										char* sig, char* name, BBitmap* icon = NULL);
104 									BarTeamInfo(const BarTeamInfo &info);
105 									~BarTeamInfo();
106 
107 private:
108 			void					_Init();
109 
110 public:
111 			BList*					teams;
112 			uint32					flags;
113 			char*					sig;
114 			char*					name;
115 			BBitmap*				icon;
116 			BBitmap*				iconCache[kIconCacheCount];
117 };
118 
119 
120 class WindowIconCache {
121 public:
122 									WindowIconCache(int32 id, BBitmap* icon = NULL);
123 									WindowIconCache(const WindowIconCache &cache);
124 									~WindowIconCache();
125 
126 private:
127 			void					_Init();
128 
129 public:
130 			int32					id;
131 			BBitmap*				icon;
132 			BBitmap*				iconCache[kWindowIconCacheCount];
133 };
134 
135 
136 class TBarApp : public BServer {
137 public:
138 									TBarApp();
139 	virtual							~TBarApp();
140 
141 	virtual	bool					QuitRequested();
142 	virtual	void					MessageReceived(BMessage* message);
143 	virtual	void					RefsReceived(BMessage* refs);
144 
145 			desk_settings*			Settings() { return &fSettings; }
146 			desk_settings*			DefaultSettings()
147 										{ return &fDefaultSettings; }
148 			clock_settings*			ClockSettings() { return &fClockSettings; }
149 
150 			TBarView*				BarView() const { return fBarView; }
151 			TBarWindow*				BarWindow() const { return fBarWindow; }
152 
153 	static	void					Subscribe(const BMessenger &subscriber,
154 										BList*);
155 	static	void					Unsubscribe(const BMessenger &subscriber);
156 
157 			int32					TeamIconSize();
158 
159 			BBitmap*				FetchTeamIcon(team_id team, int32 size);
160 			BBitmap*				FetchWindowIcon(bool local = true,
161 										bool minimized = false);
162 
163 private:
164 			void					AddTeam(team_id team, uint32 flags,
165 										const char* sig, entry_ref*);
166 			void					RemoveTeam(team_id);
167 
168 			void					InitSettings();
169 			void					SaveSettings();
170 
171 			void					ShowPreferencesWindow();
172 			void					QuitPreferencesWindow();
173 
174 			void					ResizeTeamIcons();
175 			status_t				_CacheTeamIcon(BarTeamInfo* barInfo);
176 			status_t				_CacheTeamIcon(BarTeamInfo* barInfo, int32 size);
177 			status_t				_CacheWindowIcon(WindowIconCache* winCache);
178 
179 private:
180 			TBarWindow*				fBarWindow;
181 			TBarView*				fBarView;
182 			BMessenger				fSwitcherMessenger;
183 			BMessenger				fStatusViewMessenger;
184 			BFile*					fSettingsFile;
185 			BFile*					fClockSettingsFile;
186 			desk_settings			fSettings;
187 			desk_settings			fDefaultSettings;
188 			clock_settings			fClockSettings;
189 			PreferencesWindow*		fPreferencesWindow;
190 
191 	static	BLocker					sSubscriberLock;
192 	static	BList					sBarTeamInfoList;
193 	static	BList					sWindowIconCache;
194 	static	BList					sSubscribers;
195 };
196 
197 
198 #endif	// BAR_APP_H
199