1*353d8f4dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*353d8f4dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*353d8f4dSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*353d8f4dSAndrew Rist * distributed with this work for additional information
6*353d8f4dSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*353d8f4dSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*353d8f4dSAndrew Rist * "License"); you may not use this file except in compliance
9*353d8f4dSAndrew Rist * with the License. You may obtain a copy of the License at
10*353d8f4dSAndrew Rist *
11*353d8f4dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*353d8f4dSAndrew Rist *
13*353d8f4dSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*353d8f4dSAndrew Rist * software distributed under the License is distributed on an
15*353d8f4dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*353d8f4dSAndrew Rist * KIND, either express or implied. See the License for the
17*353d8f4dSAndrew Rist * specific language governing permissions and limitations
18*353d8f4dSAndrew Rist * under the License.
19*353d8f4dSAndrew Rist *
20*353d8f4dSAndrew Rist *************************************************************/
21*353d8f4dSAndrew Rist
22*353d8f4dSAndrew Rist
23cdf0e10cSrcweir #ifndef _SFXVIRTMENU_HXX
24cdf0e10cSrcweir #define _SFXVIRTMENU_HXX
25cdf0e10cSrcweir
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <svl/svarray.hxx>
28cdf0e10cSrcweir #include <sfx2/mnuitem.hxx>
29cdf0e10cSrcweir #include "mnucfga.hxx"
30cdf0e10cSrcweir
31cdf0e10cSrcweir class SfxBindings;
32cdf0e10cSrcweir class Timer;
33cdf0e10cSrcweir class SfxMenuImageControl_Impl;
34cdf0e10cSrcweir
35cdf0e10cSrcweir SV_DECL_PTRARR_DEL( SfxMenuCtrlArr_Impl, SfxMenuControl*, 2, 2 )
36cdf0e10cSrcweir
37cdf0e10cSrcweir class SAL_DLLPUBLIC_EXPORT SfxVirtualMenu
38cdf0e10cSrcweir {
39cdf0e10cSrcweir friend class SfxMenuControl;
40cdf0e10cSrcweir
41cdf0e10cSrcweir private:
42cdf0e10cSrcweir Menu* pSVMenu;
43cdf0e10cSrcweir SfxVirtualMenu* pParent;
44cdf0e10cSrcweir SfxMenuCtrlArr_Impl* pAppCtrl;
45cdf0e10cSrcweir SfxMenuControl* pItems;
46cdf0e10cSrcweir SfxMenuImageControl_Impl* pImageControl;
47cdf0e10cSrcweir SfxBindings* pBindings;
48cdf0e10cSrcweir ResMgr* pResMgr;
49cdf0e10cSrcweir PopupMenu* pWindowMenu;
50cdf0e10cSrcweir PopupMenu* pPickMenu;
51cdf0e10cSrcweir PopupMenu* pAddonsMenu;
52cdf0e10cSrcweir Timer* pAutoDeactivate; // Hack fuer QAP-Bug
53cdf0e10cSrcweir sal_uInt16 nVisibleItems;
54cdf0e10cSrcweir sal_uInt16 nId;
55cdf0e10cSrcweir sal_uInt16 nCount;
56cdf0e10cSrcweir sal_uInt16 nLocks;
57cdf0e10cSrcweir sal_Bool bResCtor : 1; // SV Menu created from resource
58cdf0e10cSrcweir sal_Bool bOLE : 1; // InPlaceMenu
59cdf0e10cSrcweir sal_Bool bHelpInitialized : 1;
60cdf0e10cSrcweir sal_Bool bIsActive : 1;
61cdf0e10cSrcweir sal_Bool bControllersUnBound : 1;
62cdf0e10cSrcweir sal_Bool bWasHighContrast : 1;
63cdf0e10cSrcweir sal_Bool bIsAddonPopupMenu : 1;
64cdf0e10cSrcweir
65cdf0e10cSrcweir private:
66cdf0e10cSrcweir void Construct_Impl();
67cdf0e10cSrcweir bool Bind_Impl( Menu *pMenu );
GetAppCtrl_Impl()68cdf0e10cSrcweir inline SfxMenuCtrlArr_Impl& GetAppCtrl_Impl()
69cdf0e10cSrcweir {
70cdf0e10cSrcweir return pAppCtrl? *pAppCtrl: *(pAppCtrl = new SfxMenuCtrlArr_Impl) ;
71cdf0e10cSrcweir }
72cdf0e10cSrcweir void UnbindControllers();
73cdf0e10cSrcweir void BindControllers();
74cdf0e10cSrcweir
75cdf0e10cSrcweir protected:
76cdf0e10cSrcweir SfxVirtualMenu( sal_uInt16 nOwnId, SfxVirtualMenu* pParent, Menu& rMenu, sal_Bool bWithHelp,
77cdf0e10cSrcweir SfxBindings &rBind, sal_Bool bOLEServer=sal_False, sal_Bool bRes=sal_False, sal_Bool bIsAddonMenu=sal_False );
78cdf0e10cSrcweir
79cdf0e10cSrcweir void CreateFromSVMenu();
80cdf0e10cSrcweir DECL_LINK( Highlight, Menu * );
81cdf0e10cSrcweir DECL_LINK( Activate, Menu * );
82cdf0e10cSrcweir DECL_LINK( Deactivate, Menu * );
83cdf0e10cSrcweir DECL_LINK( SettingsChanged, void* );
84cdf0e10cSrcweir
85cdf0e10cSrcweir // Used for runtime popup menus
86cdf0e10cSrcweir void UpdateImages( Menu* pMenu );
87cdf0e10cSrcweir void RemoveMenuImages( Menu* pMenu );
88cdf0e10cSrcweir void InsertAddOnsMenuItem( Menu* pMenu );
89cdf0e10cSrcweir
90cdf0e10cSrcweir public:
91cdf0e10cSrcweir ~SfxVirtualMenu();
92cdf0e10cSrcweir SfxVirtualMenu( Menu *pStarViewMenu, sal_Bool bWithHelp,
93cdf0e10cSrcweir SfxBindings &rBind, sal_Bool bOLEServer=sal_False, sal_Bool bRes=sal_False, sal_Bool bIsAddonMenu=sal_False );
94cdf0e10cSrcweir void CheckItem( sal_uInt16 nItemId, sal_Bool bCheck );
95cdf0e10cSrcweir void EnableItem( sal_uInt16 nItemId, sal_Bool bEnable );
96cdf0e10cSrcweir void SetItemText( sal_uInt16 nItemId, const String& rText );
97cdf0e10cSrcweir
98cdf0e10cSrcweir sal_uInt16 GetItemPos( sal_uInt16 nItemId ) const;
99cdf0e10cSrcweir
100cdf0e10cSrcweir sal_uInt16 GetItemCount() const;
101cdf0e10cSrcweir Menu* GetSVMenu() const;
102cdf0e10cSrcweir SfxMenuControl& operator[]( sal_uInt16 nPos ) const;
103cdf0e10cSrcweir
104cdf0e10cSrcweir sal_uInt16 GetItemId( sal_uInt16 nPos ) const;
105cdf0e10cSrcweir SfxVirtualMenu* GetPopupMenu( sal_uInt16 nId ) const;
106cdf0e10cSrcweir String GetItemText( sal_uInt16 nId ) const;
107cdf0e10cSrcweir String GetItemHelpText( sal_uInt16 nId ) const;
108cdf0e10cSrcweir
109cdf0e10cSrcweir //void InvalidateKeyCodes();
110cdf0e10cSrcweir
GetParentMenu() const111cdf0e10cSrcweir SfxVirtualMenu* GetParentMenu() const { return pParent; }
SetParentMenu(SfxVirtualMenu * pNewParent)112cdf0e10cSrcweir void SetParentMenu( SfxVirtualMenu* pNewParent )
113cdf0e10cSrcweir { pParent = pNewParent; }
114cdf0e10cSrcweir
115cdf0e10cSrcweir void SetPopupMenu( sal_uInt16 nId, PopupMenu *pMenu );
IsFromResource() const116cdf0e10cSrcweir sal_Bool IsFromResource() const
117cdf0e10cSrcweir { return bResCtor; }
118cdf0e10cSrcweir void InitPopup(sal_uInt16 nPos, sal_Bool bOLE = sal_True);
119cdf0e10cSrcweir void InitializeHelp();
SetResMgr(ResMgr * pMgr)120cdf0e10cSrcweir void SetResMgr(ResMgr* pMgr) {pResMgr = pMgr; }
GetResMgr()121cdf0e10cSrcweir ResMgr* GetResMgr() { return pResMgr; }
122cdf0e10cSrcweir void SetHelpIds( ResMgr* );
123cdf0e10cSrcweir sal_Bool IsHiContrastMode() const;
124cdf0e10cSrcweir void UpdateImages();
125cdf0e10cSrcweir
126cdf0e10cSrcweir DECL_LINK( Select, Menu * );
127cdf0e10cSrcweir };
128cdf0e10cSrcweir
129cdf0e10cSrcweir //--------------------------------------------------------------------
130cdf0e10cSrcweir
131cdf0e10cSrcweir // return the number of virtual items in this menu
132cdf0e10cSrcweir
GetItemCount() const133cdf0e10cSrcweir inline sal_uInt16 SfxVirtualMenu::GetItemCount() const
134cdf0e10cSrcweir {
135cdf0e10cSrcweir return nCount;
136cdf0e10cSrcweir }
137cdf0e10cSrcweir //--------------------------------------------------------------------
138cdf0e10cSrcweir
139cdf0e10cSrcweir //
140cdf0e10cSrcweir
operator [](sal_uInt16 nPos) const141cdf0e10cSrcweir inline SfxMenuControl& SfxVirtualMenu::operator[]( sal_uInt16 nPos ) const
142cdf0e10cSrcweir {
143cdf0e10cSrcweir return *(pItems+nPos);
144cdf0e10cSrcweir }
145cdf0e10cSrcweir //--------------------------------------------------------------------
146cdf0e10cSrcweir
147cdf0e10cSrcweir // returns the item id at position nPos in the menu (or 0 if sep.)
148cdf0e10cSrcweir
GetItemId(sal_uInt16 nPos) const149cdf0e10cSrcweir inline sal_uInt16 SfxVirtualMenu::GetItemId( sal_uInt16 nPos ) const
150cdf0e10cSrcweir {
151cdf0e10cSrcweir return pItems ? pItems[nPos].GetId() : 0;
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
154cdf0e10cSrcweir
155cdf0e10cSrcweir #endif
156