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