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