xref: /haiku/src/servers/app/Desktop.h (revision 3dcb3b079ab645a90859eba6505cf2692c291138)
133bbe223SAxel Dörfler //------------------------------------------------------------------------------
2*3dcb3b07SStephan Aßmus //	Copyright (c) 2001-2005, Haiku, Inc. All rights reserved.
3*3dcb3b07SStephan Aßmus //  Distributed under the terms of the MIT license.
433bbe223SAxel Dörfler //
5*3dcb3b07SStephan Aßmus //	File Name:		Desktop.h
633bbe223SAxel Dörfler //	Author:			Adi Oanca <adioanca@cotty.iren.ro>
7*3dcb3b07SStephan Aßmus //					Stephan Aßmus <superstippi@gmx.de>
833bbe223SAxel Dörfler //	Description:	Class used to encapsulate desktop management
933bbe223SAxel Dörfler //
1033bbe223SAxel Dörfler //------------------------------------------------------------------------------
1133bbe223SAxel Dörfler #ifndef _DESKTOP_H_
1233bbe223SAxel Dörfler #define _DESKTOP_H_
1333bbe223SAxel Dörfler 
1433bbe223SAxel Dörfler #include <InterfaceDefs.h>
15*3dcb3b07SStephan Aßmus #include <List.h>
16*3dcb3b07SStephan Aßmus #include <Locker.h>
17*3dcb3b07SStephan Aßmus #include <Menu.h>
1833bbe223SAxel Dörfler 
19*3dcb3b07SStephan Aßmus class BMessage;
20*3dcb3b07SStephan Aßmus class BPortLink;
21*3dcb3b07SStephan Aßmus class DisplayDriver;
22*3dcb3b07SStephan Aßmus class HWInterface;
23*3dcb3b07SStephan Aßmus class Layer;
2433bbe223SAxel Dörfler class RootLayer;
2533bbe223SAxel Dörfler class Screen;
2633bbe223SAxel Dörfler class WinBorder;
2733bbe223SAxel Dörfler 
28*3dcb3b07SStephan Aßmus class Desktop {
2933bbe223SAxel Dörfler  public:
3033bbe223SAxel Dörfler 	// startup methods
31*3dcb3b07SStephan Aßmus 								Desktop();
32*3dcb3b07SStephan Aßmus 	virtual						~Desktop();
33*3dcb3b07SStephan Aßmus 
34*3dcb3b07SStephan Aßmus 			void				Init();
3533bbe223SAxel Dörfler 
3633bbe223SAxel Dörfler 	// 1-BigScreen or n-SmallScreens
37*3dcb3b07SStephan Aßmus 			void				InitMode();
3833bbe223SAxel Dörfler 
3933bbe223SAxel Dörfler 	// Methods for multiple monitors.
4033bbe223SAxel Dörfler 			Screen*				ScreenAt(int32 index) const;
41*3dcb3b07SStephan Aßmus 			int32				ScreenCount() const;
42*3dcb3b07SStephan Aßmus 			Screen*				ActiveScreen() const;
4333bbe223SAxel Dörfler 
44*3dcb3b07SStephan Aßmus 			void				SetActiveRootLayerByIndex(int32 index);
45*3dcb3b07SStephan Aßmus 			void				SetActiveRootLayer(RootLayer* layer);
4633bbe223SAxel Dörfler 			RootLayer*			RootLayerAt(int32 index);
47*3dcb3b07SStephan Aßmus 			RootLayer*			ActiveRootLayer() const;
48*3dcb3b07SStephan Aßmus 			int32				ActiveRootLayerIndex() const;
49*3dcb3b07SStephan Aßmus 			int32				CountRootLayers() const;
50*3dcb3b07SStephan Aßmus 
51*3dcb3b07SStephan Aßmus 			DisplayDriver*		GetDisplayDriver() const;
52*3dcb3b07SStephan Aßmus 			HWInterface*		GetHWInterface() const;
5333bbe223SAxel Dörfler 
5433bbe223SAxel Dörfler 	// Methods for layer(WinBorder) manipulation.
5533bbe223SAxel Dörfler 			void				AddWinBorder(WinBorder *winBorder);
5633bbe223SAxel Dörfler 			void				RemoveWinBorder(WinBorder *winBorder);
57*3dcb3b07SStephan Aßmus 			void				SetWinBorderFeel(WinBorder *winBorder,
58*3dcb3b07SStephan Aßmus 												 uint32 feel);
59*3dcb3b07SStephan Aßmus 			void				AddWinBorderToSubset(WinBorder *winBorder,
60*3dcb3b07SStephan Aßmus 													 WinBorder *toWinBorder);
61*3dcb3b07SStephan Aßmus 			void				RemoveWinBorderFromSubset(WinBorder *winBorder,
62*3dcb3b07SStephan Aßmus 														  WinBorder *fromWinBorder);
6333bbe223SAxel Dörfler 
64*3dcb3b07SStephan Aßmus 			WinBorder*			FindWinBorderByServerWindowTokenAndTeamID(int32 token,
65*3dcb3b07SStephan Aßmus 																		  team_id teamID);
6633bbe223SAxel Dörfler 	// get list of registed windows
6733bbe223SAxel Dörfler 			const BList&		WindowList() const
6833bbe223SAxel Dörfler 								{
6933bbe223SAxel Dörfler 									if (!IsLocked())
7033bbe223SAxel Dörfler 										debugger("You must lock before getting registered windows list\n");
7133bbe223SAxel Dörfler 									return fWinBorderList;
7233bbe223SAxel Dörfler 								}
7333bbe223SAxel Dörfler 
7433bbe223SAxel Dörfler 	// locking with regards to registered windows list
75*3dcb3b07SStephan Aßmus 			bool				Lock()
76*3dcb3b07SStephan Aßmus 									{ return fWinLock.Lock(); }
77*3dcb3b07SStephan Aßmus 			void				Unlock()
78*3dcb3b07SStephan Aßmus 									{ return fWinLock.Unlock(); }
79*3dcb3b07SStephan Aßmus 			bool				IsLocked() const
80*3dcb3b07SStephan Aßmus 									{ return fWinLock.IsLocked(); }
8133bbe223SAxel Dörfler 
8233bbe223SAxel Dörfler 	// Methods for various desktop stuff handled by the server
8333bbe223SAxel Dörfler 			void				SetScrollBarInfo(const scroll_bar_info &info);
84*3dcb3b07SStephan Aßmus 			scroll_bar_info		ScrollBarInfo() const;
8533bbe223SAxel Dörfler 
8633bbe223SAxel Dörfler 			void				SetMenuInfo(const menu_info &info);
87*3dcb3b07SStephan Aßmus 			menu_info			MenuInfo() const;
8833bbe223SAxel Dörfler 
8933bbe223SAxel Dörfler 			void				UseFFMouse(const bool &useffm);
90*3dcb3b07SStephan Aßmus 			bool				FFMouseInUse() const;
9133bbe223SAxel Dörfler 			void				SetFFMouseMode(const mode_mouse &value);
92*3dcb3b07SStephan Aßmus 			mode_mouse			FFMouseMode() const;
9333bbe223SAxel Dörfler 
9433bbe223SAxel Dörfler 	// Debugging methods
95*3dcb3b07SStephan Aßmus 			void				PrintToStream();
9633bbe223SAxel Dörfler 			void				PrintVisibleInRootLayerNo(int32 no);
9733bbe223SAxel Dörfler 
9833bbe223SAxel Dörfler  private:
99*3dcb3b07SStephan Aßmus 			void				_AddGraphicsCard(HWInterface* interface);
10033bbe223SAxel Dörfler 
10133bbe223SAxel Dörfler 			BList				fWinBorderList;
10233bbe223SAxel Dörfler 			BLocker				fWinLock;
10333bbe223SAxel Dörfler 
10433bbe223SAxel Dörfler 			BList				fRootLayerList;
10533bbe223SAxel Dörfler 			RootLayer*			fActiveRootLayer;
10633bbe223SAxel Dörfler 
10733bbe223SAxel Dörfler 			BList				fScreenList;
10833bbe223SAxel Dörfler 			Screen*				fActiveScreen;
10933bbe223SAxel Dörfler 
11033bbe223SAxel Dörfler 			scroll_bar_info		fScrollBarInfo;
11133bbe223SAxel Dörfler 			menu_info			fMenuInfo;
11233bbe223SAxel Dörfler 			mode_mouse			fMouseMode;
11333bbe223SAxel Dörfler 			bool				fFFMouseMode;
11433bbe223SAxel Dörfler };
11533bbe223SAxel Dörfler 
1166390df8eSStefano Ceccherini extern Desktop *gDesktop;
11733bbe223SAxel Dörfler 
11833bbe223SAxel Dörfler #endif // _DESKTOP_H_
119