xref: /AOO41X/main/sfx2/source/inc/virtmenu.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _SFXVIRTMENU_HXX
28 #define _SFXVIRTMENU_HXX
29 
30 
31 #include <svl/svarray.hxx>
32 #include <sfx2/mnuitem.hxx>
33 #include "mnucfga.hxx"
34 
35 class SfxBindings;
36 class Timer;
37 class SfxMenuImageControl_Impl;
38 
39 SV_DECL_PTRARR_DEL( SfxMenuCtrlArr_Impl, SfxMenuControl*, 2, 2 )
40 
41 class SAL_DLLPUBLIC_EXPORT SfxVirtualMenu
42 {
43 friend class SfxMenuControl;
44 
45 private:
46 	Menu*           pSVMenu;
47 	SfxVirtualMenu* pParent;
48 	SfxMenuCtrlArr_Impl* pAppCtrl;
49 	SfxMenuControl*	pItems;
50     SfxMenuImageControl_Impl* pImageControl;
51 	SfxBindings*	pBindings;
52 	ResMgr*			pResMgr;
53     PopupMenu*      pWindowMenu;
54     PopupMenu*      pPickMenu;
55     PopupMenu*		pAddonsMenu;
56 	Timer*			pAutoDeactivate; // Hack fuer QAP-Bug
57 	sal_uInt16          nVisibleItems;
58 	sal_uInt16          nId;
59 	sal_uInt16          nCount;
60 	sal_uInt16			nLocks;
61 	sal_Bool            bResCtor : 1; // SV Menu created from resource
62 	sal_Bool			bOLE : 1;	  // InPlaceMenu
63 	sal_Bool			bHelpInitialized : 1;
64 	sal_Bool			bIsActive : 1;
65 	sal_Bool			bControllersUnBound : 1;
66 	sal_Bool			bWasHighContrast : 1;
67 	sal_Bool			bIsAddonPopupMenu : 1;
68 
69 private:
70 	void			Construct_Impl();
71 	bool        Bind_Impl( Menu *pMenu );
72 	inline SfxMenuCtrlArr_Impl& GetAppCtrl_Impl()
73 	{
74 		return pAppCtrl? *pAppCtrl: *(pAppCtrl = new SfxMenuCtrlArr_Impl) ;
75 	}
76 	void 			UnbindControllers();
77 	void			BindControllers();
78 
79 protected:
80 	SfxVirtualMenu( sal_uInt16 nOwnId, SfxVirtualMenu* pParent, Menu& rMenu, sal_Bool bWithHelp,
81 						SfxBindings &rBind, sal_Bool bOLEServer=sal_False, sal_Bool bRes=sal_False, sal_Bool bIsAddonMenu=sal_False );
82 
83 	void            CreateFromSVMenu();
84 	DECL_LINK( Highlight, Menu * );
85 	DECL_LINK( Activate, Menu * );
86 	DECL_LINK( Deactivate, Menu * );
87     DECL_LINK( SettingsChanged, void* );
88 
89 	// Used for runtime popup menus
90 	void			UpdateImages( Menu* pMenu );
91 	void			RemoveMenuImages( Menu* pMenu );
92 	void			InsertAddOnsMenuItem( Menu* pMenu );
93 
94 public:
95 					~SfxVirtualMenu();
96 					SfxVirtualMenu( Menu *pStarViewMenu, sal_Bool bWithHelp,
97 						SfxBindings &rBind, sal_Bool bOLEServer=sal_False, sal_Bool bRes=sal_False, sal_Bool bIsAddonMenu=sal_False );
98 	void            CheckItem( sal_uInt16 nItemId, sal_Bool bCheck );
99 	void            EnableItem( sal_uInt16 nItemId, sal_Bool bEnable );
100 	void            SetItemText( sal_uInt16 nItemId, const String& rText );
101 
102 	sal_uInt16          GetItemPos( sal_uInt16 nItemId ) const;
103 
104 	sal_uInt16          GetItemCount() const;
105 	Menu*           GetSVMenu() const;
106 	SfxMenuControl& operator[]( sal_uInt16 nPos ) const;
107 
108 	sal_uInt16          GetItemId( sal_uInt16 nPos ) const;
109 	SfxVirtualMenu* GetPopupMenu( sal_uInt16 nId ) const;
110 	String          GetItemText( sal_uInt16 nId ) const;
111 	String          GetItemHelpText( sal_uInt16 nId ) const;
112 
113     //void            InvalidateKeyCodes();
114 
115 	SfxVirtualMenu* GetParentMenu() const { return pParent; }
116 	void			SetParentMenu( SfxVirtualMenu* pNewParent )
117 					{ pParent = pNewParent; }
118 
119 	void			SetPopupMenu( sal_uInt16 nId, PopupMenu *pMenu );
120 	sal_Bool			IsFromResource() const
121 					{ return bResCtor; }
122 	void			InitPopup(sal_uInt16 nPos, sal_Bool bOLE = sal_True);
123 	void 			InitializeHelp();
124 	void			SetResMgr(ResMgr* pMgr)  {pResMgr = pMgr; }
125 	ResMgr*			GetResMgr() { return pResMgr; }
126 	void			SetHelpIds( ResMgr* );
127 	sal_Bool			IsHiContrastMode() const;
128 	void			UpdateImages();
129 
130 	DECL_LINK( Select, Menu * );
131 };
132 
133 //--------------------------------------------------------------------
134 
135 // return the number of virtual items in this menu
136 
137 inline sal_uInt16 SfxVirtualMenu::GetItemCount() const
138 {
139 	return nCount;
140 }
141 //--------------------------------------------------------------------
142 
143 //
144 
145 inline SfxMenuControl& SfxVirtualMenu::operator[]( sal_uInt16 nPos ) const
146 {
147 	return *(pItems+nPos);
148 }
149 //--------------------------------------------------------------------
150 
151 // returns the item id at position nPos in the menu (or 0 if sep.)
152 
153 inline sal_uInt16 SfxVirtualMenu::GetItemId( sal_uInt16 nPos ) const
154 {
155 	return pItems ? pItems[nPos].GetId() : 0;
156 }
157 
158 
159 #endif
160