1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_dbaccess.hxx"
26*b1cdbd2cSJim Jagielski #ifndef DBACCESS_TOOLBOXCONTROLLER_HXX
27*b1cdbd2cSJim Jagielski #include "toolboxcontroller.hxx"
28*b1cdbd2cSJim Jagielski #endif
29*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_IMAGETYPE_HPP_
30*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/ImageType.hpp>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_FRAME_XDISPATCHPROVIDER_HPP_
33*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProvider.hpp>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
36*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski #ifndef _SV_MENU_HXX
39*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_XUICONFIGURATIONMANAGER_HPP_
42*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XUIConfigurationManager.hpp>
43*b1cdbd2cSJim Jagielski #endif
44*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_XMODULEUICONFIGURATIONMANAGERSUPPLIER_HPP_
45*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
46*b1cdbd2cSJim Jagielski #endif
47*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_XIMAGEMANAGER_HPP_
48*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/XImageManager.hpp>
49*b1cdbd2cSJim Jagielski #endif
50*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UI_IMAGETYPE_HPP_
51*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/ImageType.hpp>
52*b1cdbd2cSJim Jagielski #endif
53*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_GRAPHIC_XGRAPHIC_HPP_
54*b1cdbd2cSJim Jagielski #include <com/sun/star/graphic/XGraphic.hpp>
55*b1cdbd2cSJim Jagielski #endif
56*b1cdbd2cSJim Jagielski #ifndef _SV_SVAPP_HXX //autogen
57*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
58*b1cdbd2cSJim Jagielski #endif
59*b1cdbd2cSJim Jagielski #ifndef _SV_TOOLBOX_HXX
60*b1cdbd2cSJim Jagielski #include <vcl/toolbox.hxx>
61*b1cdbd2cSJim Jagielski #endif
62*b1cdbd2cSJim Jagielski #ifndef _DBU_RESOURCE_HRC_
63*b1cdbd2cSJim Jagielski #include "dbu_resource.hrc"
64*b1cdbd2cSJim Jagielski #endif
65*b1cdbd2cSJim Jagielski #ifndef INCLUDED_SVTOOLS_MISCOPT_HXX
66*b1cdbd2cSJim Jagielski #include <svtools/miscopt.hxx>
67*b1cdbd2cSJim Jagielski #endif
68*b1cdbd2cSJim Jagielski #ifndef INCLUDED_SVTOOLS_MODULEOPTIONS_HXX
69*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
70*b1cdbd2cSJim Jagielski #endif
71*b1cdbd2cSJim Jagielski #ifndef TOOLS_DIAGNOSE_EX_H
72*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
73*b1cdbd2cSJim Jagielski #endif
74*b1cdbd2cSJim Jagielski #ifndef INCLUDED_SVTOOLS_MENUOPTIONS_HXX
75*b1cdbd2cSJim Jagielski #include <svtools/menuoptions.hxx>
76*b1cdbd2cSJim Jagielski #endif
77*b1cdbd2cSJim Jagielski #ifndef _VOS_MUTEX_HXX_
78*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
79*b1cdbd2cSJim Jagielski #endif
80*b1cdbd2cSJim Jagielski #ifndef _DBU_REGHELPER_HXX_
81*b1cdbd2cSJim Jagielski #include "dbu_reghelper.hxx"
82*b1cdbd2cSJim Jagielski #endif
83*b1cdbd2cSJim Jagielski #ifndef DBAUI_TOOLS_HXX
84*b1cdbd2cSJim Jagielski #include "UITools.hxx"
85*b1cdbd2cSJim Jagielski #endif
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 
createRegistryInfo_OToolboxController()88*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_OToolboxController()
89*b1cdbd2cSJim Jagielski {
90*b1cdbd2cSJim Jagielski 	static ::dbaui::OMultiInstanceAutoRegistration< ::dbaui::OToolboxController> aAutoRegistration;
91*b1cdbd2cSJim Jagielski }
92*b1cdbd2cSJim Jagielski namespace dbaui
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski 	using namespace svt;
95*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::graphic;
96*b1cdbd2cSJim Jagielski 	using namespace com::sun::star::uno;
97*b1cdbd2cSJim Jagielski 	using namespace com::sun::star::beans;
98*b1cdbd2cSJim Jagielski 	using namespace com::sun::star::lang;
99*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::frame;
100*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::util;
101*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::ui;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     namespace
104*b1cdbd2cSJim Jagielski     {
lcl_copy(Menu * _pMenu,sal_uInt16 _nMenuId,sal_uInt16 _nMenuPos,ToolBox * _pToolBox,sal_uInt16 _nToolId,const::rtl::OUString & _sCommand)105*b1cdbd2cSJim Jagielski         void lcl_copy(Menu* _pMenu,sal_uInt16 _nMenuId,sal_uInt16 _nMenuPos,ToolBox* _pToolBox,sal_uInt16 _nToolId,const ::rtl::OUString& _sCommand)
106*b1cdbd2cSJim Jagielski         {
107*b1cdbd2cSJim Jagielski             if ( _pMenu->GetItemType(_nMenuPos) != MENUITEM_STRING )
108*b1cdbd2cSJim Jagielski                 _pToolBox->SetItemImage(_nToolId, _pMenu->GetItemImage(_nMenuId));
109*b1cdbd2cSJim Jagielski             _pToolBox->SetItemCommand( _nToolId, _sCommand);
110*b1cdbd2cSJim Jagielski             _pToolBox->SetHelpId(_nToolId, _pMenu->GetHelpId(_nMenuId));
111*b1cdbd2cSJim Jagielski             _pToolBox->SetHelpText(_nToolId, _pMenu->GetHelpText(_nMenuId));
112*b1cdbd2cSJim Jagielski             _pToolBox->SetQuickHelpText(_nToolId, _pMenu->GetTipHelpText(_nMenuId));
113*b1cdbd2cSJim Jagielski             _pToolBox->SetItemText(_nToolId, _pMenu->GetItemText(_nMenuId));
114*b1cdbd2cSJim Jagielski         }
115*b1cdbd2cSJim Jagielski     }
116*b1cdbd2cSJim Jagielski 
OToolboxController(const Reference<XMultiServiceFactory> & _rxORB)117*b1cdbd2cSJim Jagielski 	OToolboxController::OToolboxController(const Reference< XMultiServiceFactory >& _rxORB)
118*b1cdbd2cSJim Jagielski 		: m_nToolBoxId(1)
119*b1cdbd2cSJim Jagielski 	{
120*b1cdbd2cSJim Jagielski 		osl_incrementInterlockedCount(&m_refCount);
121*b1cdbd2cSJim Jagielski 		m_xServiceManager = _rxORB;
122*b1cdbd2cSJim Jagielski 		osl_decrementInterlockedCount(&m_refCount);
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	}
125*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
126*b1cdbd2cSJim Jagielski 	IMPLEMENT_SERVICE_INFO1_STATIC(OToolboxController,"com.sun.star.sdb.ApplicationToolboxController","com.sun.star.frame.ToolboxController")
127*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
128*b1cdbd2cSJim Jagielski 	// XInterface
queryInterface(const Type & _rType)129*b1cdbd2cSJim Jagielski 	Any SAL_CALL OToolboxController::queryInterface( const Type& _rType ) throw (RuntimeException)
130*b1cdbd2cSJim Jagielski 	{
131*b1cdbd2cSJim Jagielski 		Any aReturn = ToolboxController::queryInterface(_rType);
132*b1cdbd2cSJim Jagielski 		if (!aReturn.hasValue())
133*b1cdbd2cSJim Jagielski 			aReturn = TToolboxController_BASE::queryInterface(_rType);
134*b1cdbd2cSJim Jagielski 		return aReturn;
135*b1cdbd2cSJim Jagielski 	}
136*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
acquire()137*b1cdbd2cSJim Jagielski 	void SAL_CALL OToolboxController::acquire() throw ()
138*b1cdbd2cSJim Jagielski 	{
139*b1cdbd2cSJim Jagielski 		ToolboxController::acquire();
140*b1cdbd2cSJim Jagielski 	}
141*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
release()142*b1cdbd2cSJim Jagielski 	void SAL_CALL OToolboxController::release() throw ()
143*b1cdbd2cSJim Jagielski 	{
144*b1cdbd2cSJim Jagielski 		ToolboxController::release();
145*b1cdbd2cSJim Jagielski 	}
146*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
initialize(const Sequence<Any> & _rArguments)147*b1cdbd2cSJim Jagielski 	void SAL_CALL OToolboxController::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException)
148*b1cdbd2cSJim Jagielski 	{
149*b1cdbd2cSJim Jagielski 		ToolboxController::initialize(_rArguments);
150*b1cdbd2cSJim Jagielski 		vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
151*b1cdbd2cSJim Jagielski 		::osl::MutexGuard aGuard(m_aMutex);
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 		if ( m_aCommandURL.equalsAscii(".uno:DBNewForm") )
154*b1cdbd2cSJim Jagielski 		{
155*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewForm"))           ,sal_True));
156*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewView"))           ,sal_True));
157*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewViewSQL"))        ,sal_True));
158*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewQuery"))          ,sal_True));
159*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewQuerySql"))       ,sal_True));
160*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewReport"))			,sal_True));
161*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewReportAutoPilot")),sal_True));
162*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBNewTable"))          ,sal_True));
163*b1cdbd2cSJim Jagielski 		}
164*b1cdbd2cSJim Jagielski 		else
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Refresh"))         ,sal_True));
167*b1cdbd2cSJim Jagielski 			m_aStates.insert(TCommandState::value_type(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:DBRebuildData"))   ,sal_True));
168*b1cdbd2cSJim Jagielski 		}
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 		TCommandState::iterator aIter = m_aStates.begin();
171*b1cdbd2cSJim Jagielski         TCommandState::iterator aEnd = m_aStates.end();
172*b1cdbd2cSJim Jagielski 		for (; aIter != aEnd; ++aIter)
173*b1cdbd2cSJim Jagielski 			addStatusListener(aIter->first);
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 		ToolBox*    pToolBox = static_cast<ToolBox*>(VCLUnoHelper::GetWindow(getParent()));
176*b1cdbd2cSJim Jagielski 		if ( pToolBox )
177*b1cdbd2cSJim Jagielski 		{
178*b1cdbd2cSJim Jagielski 			sal_uInt16 nCount = pToolBox->GetItemCount();
179*b1cdbd2cSJim Jagielski 			for (sal_uInt16 nPos = 0; nPos < nCount; ++nPos)
180*b1cdbd2cSJim Jagielski 			{
181*b1cdbd2cSJim Jagielski 				sal_uInt16 nItemId = pToolBox->GetItemId(nPos);
182*b1cdbd2cSJim Jagielski 				if ( pToolBox->GetItemCommand(nItemId) == String(m_aCommandURL) )
183*b1cdbd2cSJim Jagielski 				{
184*b1cdbd2cSJim Jagielski 					m_nToolBoxId = nItemId;
185*b1cdbd2cSJim Jagielski 					break;
186*b1cdbd2cSJim Jagielski 				}
187*b1cdbd2cSJim Jagielski 			}
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski             // check if paste special is allowed, when not don't add DROPDOWN
190*b1cdbd2cSJim Jagielski 			pToolBox->SetItemBits(m_nToolBoxId,pToolBox->GetItemBits(m_nToolBoxId) | TIB_DROPDOWN);
191*b1cdbd2cSJim Jagielski 		}
192*b1cdbd2cSJim Jagielski 	}
193*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
statusChanged(const FeatureStateEvent & Event)194*b1cdbd2cSJim Jagielski 	void SAL_CALL OToolboxController::statusChanged( const FeatureStateEvent& Event ) throw ( RuntimeException )
195*b1cdbd2cSJim Jagielski 	{
196*b1cdbd2cSJim Jagielski         vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
197*b1cdbd2cSJim Jagielski 		::osl::MutexGuard aGuard(m_aMutex);
198*b1cdbd2cSJim Jagielski 		TCommandState::iterator aFind = m_aStates.find( Event.FeatureURL.Complete );
199*b1cdbd2cSJim Jagielski 		if ( aFind != m_aStates.end() )
200*b1cdbd2cSJim Jagielski         {
201*b1cdbd2cSJim Jagielski 			aFind->second = Event.IsEnabled;
202*b1cdbd2cSJim Jagielski             if ( m_aCommandURL == aFind->first && !Event.IsEnabled )
203*b1cdbd2cSJim Jagielski             {
204*b1cdbd2cSJim Jagielski                 ::std::auto_ptr<PopupMenu> pMenu = getMenu();
205*b1cdbd2cSJim Jagielski                 sal_uInt16 nCount = pMenu->GetItemCount();
206*b1cdbd2cSJim Jagielski                 for (sal_uInt16 i = 0; i < nCount; ++i)
207*b1cdbd2cSJim Jagielski                 {
208*b1cdbd2cSJim Jagielski                     sal_uInt16 nItemId = pMenu->GetItemId(i);
209*b1cdbd2cSJim Jagielski                     aFind = m_aStates.find(pMenu->GetItemCommand(nItemId));
210*b1cdbd2cSJim Jagielski                     if ( aFind != m_aStates.end() && aFind->second )
211*b1cdbd2cSJim Jagielski                     {
212*b1cdbd2cSJim Jagielski                         m_aCommandURL = aFind->first;
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski                         ToolBox* pToolBox = static_cast<ToolBox*>(VCLUnoHelper::GetWindow(getParent()));
215*b1cdbd2cSJim Jagielski                         lcl_copy(pMenu.get(),nItemId,i,pToolBox,m_nToolBoxId, m_aCommandURL);
216*b1cdbd2cSJim Jagielski                         break;
217*b1cdbd2cSJim Jagielski                     }
218*b1cdbd2cSJim Jagielski                 }
219*b1cdbd2cSJim Jagielski             }
220*b1cdbd2cSJim Jagielski         }
221*b1cdbd2cSJim Jagielski 	}
222*b1cdbd2cSJim Jagielski     // -----------------------------------------------------------------------------
getMenu()223*b1cdbd2cSJim Jagielski     ::std::auto_ptr<PopupMenu> OToolboxController::getMenu()
224*b1cdbd2cSJim Jagielski     {
225*b1cdbd2cSJim Jagielski         ::std::auto_ptr<PopupMenu> pMenu;
226*b1cdbd2cSJim Jagielski 		if ( m_aStates.size() > 2 )
227*b1cdbd2cSJim Jagielski 		{
228*b1cdbd2cSJim Jagielski 			pMenu.reset( new PopupMenu( ModuleRes( RID_MENU_APP_NEW ) ) );
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 			sal_Bool bHighContrast = isHighContrast();
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 			try
233*b1cdbd2cSJim Jagielski 			{
234*b1cdbd2cSJim Jagielski 				Reference<XModuleUIConfigurationManagerSupplier> xModuleCfgMgrSupplier(getServiceManager()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ui.ModuleUIConfigurationManagerSupplier"))),UNO_QUERY);
235*b1cdbd2cSJim Jagielski 				Reference<XUIConfigurationManager> xUIConfigMgr = xModuleCfgMgrSupplier->getUIConfigurationManager(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.OfficeDatabaseDocument")));
236*b1cdbd2cSJim Jagielski 				Reference<XImageManager> xImageMgr(xUIConfigMgr->getImageManager(),UNO_QUERY);
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 				short nImageType = hasBigImages() ? ImageType::SIZE_LARGE : ImageType::SIZE_DEFAULT;
240*b1cdbd2cSJim Jagielski 				if ( bHighContrast )
241*b1cdbd2cSJim Jagielski 					nImageType |= ImageType::COLOR_HIGHCONTRAST;
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 				Sequence< ::rtl::OUString> aSeq(1);
244*b1cdbd2cSJim Jagielski 				sal_uInt16 nCount = pMenu->GetItemCount();
245*b1cdbd2cSJim Jagielski 				for (sal_uInt16 nPos = 0; nPos < nCount; ++nPos)
246*b1cdbd2cSJim Jagielski 				{
247*b1cdbd2cSJim Jagielski                     if ( pMenu->GetItemType( nPos ) == MENUITEM_SEPARATOR )
248*b1cdbd2cSJim Jagielski                         continue;
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 					sal_uInt16 nItemId = pMenu->GetItemId(nPos);
251*b1cdbd2cSJim Jagielski 					aSeq[0] = pMenu->GetItemCommand(nItemId);
252*b1cdbd2cSJim Jagielski 					Sequence< Reference<XGraphic> > aImages = xImageMgr->getImages(nImageType,aSeq);
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 					Image aImage(aImages[0]);
255*b1cdbd2cSJim Jagielski 					pMenu->SetItemImage(nItemId,aImage);
256*b1cdbd2cSJim Jagielski 					TCommandState::iterator aFind = m_aStates.find( aSeq[0] );
257*b1cdbd2cSJim Jagielski 					if ( aFind != m_aStates.end() )
258*b1cdbd2cSJim Jagielski 					{
259*b1cdbd2cSJim Jagielski 						pMenu->EnableItem(nItemId,aFind->second);
260*b1cdbd2cSJim Jagielski 					}
261*b1cdbd2cSJim Jagielski 				}
262*b1cdbd2cSJim Jagielski 			}
263*b1cdbd2cSJim Jagielski 			catch(const Exception&)
264*b1cdbd2cSJim Jagielski 			{
265*b1cdbd2cSJim Jagielski                 DBG_UNHANDLED_EXCEPTION();
266*b1cdbd2cSJim Jagielski 			}
267*b1cdbd2cSJim Jagielski 		}
268*b1cdbd2cSJim Jagielski 		else
269*b1cdbd2cSJim Jagielski 		{
270*b1cdbd2cSJim Jagielski 			pMenu.reset( new PopupMenu( ModuleRes( RID_MENU_REFRESH_DATA ) ) );
271*b1cdbd2cSJim Jagielski 		}
272*b1cdbd2cSJim Jagielski         return pMenu;
273*b1cdbd2cSJim Jagielski     }
274*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
createPopupWindow()275*b1cdbd2cSJim Jagielski 	Reference< ::com::sun::star::awt::XWindow > SAL_CALL OToolboxController::createPopupWindow() throw (RuntimeException)
276*b1cdbd2cSJim Jagielski 	{
277*b1cdbd2cSJim Jagielski 		// execute the menu
278*b1cdbd2cSJim Jagielski 		vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
279*b1cdbd2cSJim Jagielski 		::osl::MutexGuard aGuard(m_aMutex);
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 		ToolBox* pToolBox = static_cast<ToolBox*>(VCLUnoHelper::GetWindow(getParent()));
282*b1cdbd2cSJim Jagielski         ::std::auto_ptr<PopupMenu> pMenu = getMenu();
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 		sal_uInt16 nSelected = pMenu->Execute(pToolBox, pToolBox->GetItemRect( m_nToolBoxId ),POPUPMENU_EXECUTE_DOWN);
285*b1cdbd2cSJim Jagielski 		// "cleanup" the toolbox state
286*b1cdbd2cSJim Jagielski 		Point aPoint = pToolBox->GetItemRect( m_nToolBoxId ).TopLeft();
287*b1cdbd2cSJim Jagielski 		MouseEvent aLeave( aPoint, 0, MOUSE_LEAVEWINDOW | MOUSE_SYNTHETIC );
288*b1cdbd2cSJim Jagielski 		pToolBox->MouseMove( aLeave );
289*b1cdbd2cSJim Jagielski 		pToolBox->SetItemDown( m_nToolBoxId, sal_False);
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 		if ( nSelected )
292*b1cdbd2cSJim Jagielski 		{
293*b1cdbd2cSJim Jagielski             m_aCommandURL = pMenu->GetItemCommand(nSelected);
294*b1cdbd2cSJim Jagielski             lcl_copy(pMenu.get(),nSelected,pMenu->GetItemPos(nSelected),pToolBox,m_nToolBoxId, m_aCommandURL);
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 			Reference<XDispatch> xDispatch = m_aListenerMap.find(m_aCommandURL)->second;
297*b1cdbd2cSJim Jagielski 			if ( xDispatch.is() )
298*b1cdbd2cSJim Jagielski 			{
299*b1cdbd2cSJim Jagielski 				URL aUrl;
300*b1cdbd2cSJim Jagielski 				Sequence < PropertyValue > aArgs;
301*b1cdbd2cSJim Jagielski 				aUrl.Complete = m_aCommandURL;
302*b1cdbd2cSJim Jagielski 				OSL_ENSURE(aUrl.Complete.getLength(),"Command is empty!");
303*b1cdbd2cSJim Jagielski 				if ( getURLTransformer().is() )
304*b1cdbd2cSJim Jagielski 					getURLTransformer()->parseStrict(aUrl);
305*b1cdbd2cSJim Jagielski 				xDispatch->dispatch(aUrl,aArgs);
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 			}
308*b1cdbd2cSJim Jagielski 		}
309*b1cdbd2cSJim Jagielski 		return Reference< ::com::sun::star::awt::XWindow >();
310*b1cdbd2cSJim Jagielski 	}
311*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
312*b1cdbd2cSJim Jagielski 	// -----------------------------------------------------------------------------
313*b1cdbd2cSJim Jagielski //..........................................................................
314*b1cdbd2cSJim Jagielski } // dbaui
315*b1cdbd2cSJim Jagielski //..........................................................................
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 
318