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
27*b1cdbd2cSJim Jagielski #include "AppController.hxx"
28*b1cdbd2cSJim Jagielski #include "dbustrings.hrc"
29*b1cdbd2cSJim Jagielski #include "advancedsettingsdlg.hxx"
30*b1cdbd2cSJim Jagielski #include "subcomponentmanager.hxx"
31*b1cdbd2cSJim Jagielski #include "closeveto.hxx"
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
34*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/NamedValue.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XChild.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XContainer.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XContentEnumerationAccess.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XHierarchicalNameContainer.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/FrameSearchFlag.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XStorable.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/CommandType.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/SQLContext.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XBookmarksSupplier.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XQueryDefinitionsSupplier.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XDataSource.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XAlterView.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XAppend.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XRename.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XViewsSupplier.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XNamingService.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XFlushable.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifiable.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifyBroadcaster.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XNumberFormatter.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEmbeddedScripts.hpp>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel2.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XHierarchicalNameContainer.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifyBroadcaster.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XModifiable.hpp>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/FrameSearchFlag.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XFlushable.hpp>
68*b1cdbd2cSJim Jagielski #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
69*b1cdbd2cSJim Jagielski #include "com/sun/star/beans/NamedValue.hpp"
70*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XTopWindow.hpp>
71*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XInteractionHandler.hpp>
72*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/application/DatabaseObject.hpp>
73*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/application/DatabaseObjectContainer.hpp>
74*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XDocumentEventBroadcaster.hpp>
75*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XHierarchicalName.hpp>
76*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
77*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
78*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
79*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski #include <svl/urihelper.hxx>
82*b1cdbd2cSJim Jagielski #include <svl/filenotation.hxx>
83*b1cdbd2cSJim Jagielski #include <svtools/svtreebx.hxx>
84*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
85*b1cdbd2cSJim Jagielski #include <svtools/cliplistener.hxx>
86*b1cdbd2cSJim Jagielski #include <svtools/svlbitm.hxx>
87*b1cdbd2cSJim Jagielski #include <svtools/insdlg.hxx>
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski #include <comphelper/sequence.hxx>
90*b1cdbd2cSJim Jagielski #include <comphelper/uno3.hxx>
91*b1cdbd2cSJim Jagielski #include <comphelper/string.hxx>
92*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
93*b1cdbd2cSJim Jagielski #include <comphelper/interaction.hxx>
94*b1cdbd2cSJim Jagielski #include <comphelper/componentcontext.hxx>
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
97*b1cdbd2cSJim Jagielski #include <vcl/stdtext.hxx>
98*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
99*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx>
100*b1cdbd2cSJim Jagielski #include <vcl/lstbox.hxx>
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
103*b1cdbd2cSJim Jagielski #include <unotools/tempfile.hxx>
104*b1cdbd2cSJim Jagielski #include <unotools/internaloptions.hxx>
105*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
106*b1cdbd2cSJim Jagielski #include <unotools/historyoptions.hxx>
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski #include <sfx2/mailmodelapi.hxx>
109*b1cdbd2cSJim Jagielski #include <sfx2/filedlghelper.hxx>
110*b1cdbd2cSJim Jagielski #include <sfx2/docfilt.hxx>
111*b1cdbd2cSJim Jagielski #include <sfx2/QuerySaveDocument.hxx>
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
114*b1cdbd2cSJim Jagielski #include <cppuhelper/exc_hlp.hxx>
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski #include <connectivity/dbtools.hxx>
117*b1cdbd2cSJim Jagielski #include <connectivity/dbexception.hxx>
118*b1cdbd2cSJim Jagielski
119*b1cdbd2cSJim Jagielski #include <svx/dbaexchange.hxx>
120*b1cdbd2cSJim Jagielski #include <svx/dbaobjectex.hxx>
121*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
122*b1cdbd2cSJim Jagielski
123*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
124*b1cdbd2cSJim Jagielski #include "AppView.hxx"
125*b1cdbd2cSJim Jagielski #include "browserids.hxx"
126*b1cdbd2cSJim Jagielski #include "dbu_reghelper.hxx"
127*b1cdbd2cSJim Jagielski #include "dbu_app.hrc"
128*b1cdbd2cSJim Jagielski #include "defaultobjectnamecheck.hxx"
129*b1cdbd2cSJim Jagielski #include "databaseobjectview.hxx"
130*b1cdbd2cSJim Jagielski #include "listviewitems.hxx"
131*b1cdbd2cSJim Jagielski #include "AppDetailView.hxx"
132*b1cdbd2cSJim Jagielski #include "linkeddocuments.hxx"
133*b1cdbd2cSJim Jagielski #include "sqlmessage.hxx"
134*b1cdbd2cSJim Jagielski #include "UITools.hxx"
135*b1cdbd2cSJim Jagielski #include "dsntypes.hxx"
136*b1cdbd2cSJim Jagielski #include "dbaccess_helpid.hrc"
137*b1cdbd2cSJim Jagielski #include "dlgsave.hxx"
138*b1cdbd2cSJim Jagielski #include "dbaccess_slotid.hrc"
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski #include <algorithm>
141*b1cdbd2cSJim Jagielski #include <functional>
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp>
144*b1cdbd2cSJim Jagielski
createRegistryInfo_ODBApplication()145*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_ODBApplication()
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski static ::dbaui::OMultiInstanceAutoRegistration< ::dbaui::OApplicationController > aAutoRegistration;
148*b1cdbd2cSJim Jagielski }
149*b1cdbd2cSJim Jagielski //........................................................................
150*b1cdbd2cSJim Jagielski namespace dbaui
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski //........................................................................
153*b1cdbd2cSJim Jagielski using namespace ::dbtools;
154*b1cdbd2cSJim Jagielski using namespace ::svx;
155*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
156*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
157*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ucb;
158*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::view;
159*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
160*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
161*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
162*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
163*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
164*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdb;
165*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbc;
166*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbcx;
167*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::datatransfer;
168*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ui::dialogs;
169*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::task;
170*b1cdbd2cSJim Jagielski using ::com::sun::star::document::XEmbeddedScripts;
171*b1cdbd2cSJim Jagielski using ::com::sun::star::document::XDocumentEventBroadcaster;
172*b1cdbd2cSJim Jagielski using ::com::sun::star::document::DocumentEvent;
173*b1cdbd2cSJim Jagielski using ::com::sun::star::sdb::application::NamedDatabaseObject;
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski namespace DatabaseObject = ::com::sun::star::sdb::application::DatabaseObject;
176*b1cdbd2cSJim Jagielski namespace DatabaseObjectContainer = ::com::sun::star::sdb::application::DatabaseObjectContainer;
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getImplementationName()179*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL OApplicationController::getImplementationName() throw( RuntimeException )
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski return getImplementationName_Static();
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getImplementationName_Static()185*b1cdbd2cSJim Jagielski ::rtl::OUString OApplicationController::getImplementationName_Static() throw( RuntimeException )
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski return ::rtl::OUString(SERVICE_SDB_APPLICATIONCONTROLLER);
188*b1cdbd2cSJim Jagielski }
189*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getSupportedServiceNames_Static(void)190*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString> OApplicationController::getSupportedServiceNames_Static(void) throw( RuntimeException )
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString> aSupported(1);
193*b1cdbd2cSJim Jagielski aSupported.getArray()[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdb.application.DefaultViewController");
194*b1cdbd2cSJim Jagielski return aSupported;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
getSupportedServiceNames()197*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString> SAL_CALL OApplicationController::getSupportedServiceNames() throw(RuntimeException)
198*b1cdbd2cSJim Jagielski {
199*b1cdbd2cSJim Jagielski return getSupportedServiceNames_Static();
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
Create(const Reference<XMultiServiceFactory> & _rxFactory)202*b1cdbd2cSJim Jagielski Reference< XInterface > SAL_CALL OApplicationController::Create(const Reference<XMultiServiceFactory >& _rxFactory)
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski return *(new OApplicationController(_rxFactory));
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski struct XContainerFunctor : public ::std::unary_function< OApplicationController::TContainerVector::value_type , bool>
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski Reference<XContainerListener> m_xContainerListener;
XContainerFunctordbaui::XContainerFunctor211*b1cdbd2cSJim Jagielski XContainerFunctor( const Reference<XContainerListener>& _xContainerListener)
212*b1cdbd2cSJim Jagielski : m_xContainerListener(_xContainerListener){}
213*b1cdbd2cSJim Jagielski
operator ()dbaui::XContainerFunctor214*b1cdbd2cSJim Jagielski bool operator() (const OApplicationController::TContainerVector::value_type& lhs) const
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski if ( lhs.is() )
217*b1cdbd2cSJim Jagielski lhs->removeContainerListener(m_xContainerListener);
218*b1cdbd2cSJim Jagielski return true;
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski };
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski //====================================================================
223*b1cdbd2cSJim Jagielski //= OApplicationController
224*b1cdbd2cSJim Jagielski //====================================================================
225*b1cdbd2cSJim Jagielski class SelectionNotifier : public ::boost::noncopyable
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski private:
228*b1cdbd2cSJim Jagielski ::cppu::OInterfaceContainerHelper m_aSelectionListeners;
229*b1cdbd2cSJim Jagielski ::cppu::OWeakObject& m_rContext;
230*b1cdbd2cSJim Jagielski sal_Int32 m_nSelectionNestingLevel;
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski public:
SelectionNotifier(::osl::Mutex & _rMutex,::cppu::OWeakObject & _rContext)233*b1cdbd2cSJim Jagielski SelectionNotifier( ::osl::Mutex& _rMutex, ::cppu::OWeakObject& _rContext )
234*b1cdbd2cSJim Jagielski :m_aSelectionListeners( _rMutex )
235*b1cdbd2cSJim Jagielski ,m_rContext( _rContext )
236*b1cdbd2cSJim Jagielski ,m_nSelectionNestingLevel( 0 )
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski
addListener(const Reference<XSelectionChangeListener> & _Listener)240*b1cdbd2cSJim Jagielski void addListener( const Reference< XSelectionChangeListener >& _Listener )
241*b1cdbd2cSJim Jagielski {
242*b1cdbd2cSJim Jagielski m_aSelectionListeners.addInterface( _Listener );
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski
removeListener(const Reference<XSelectionChangeListener> & _Listener)245*b1cdbd2cSJim Jagielski void removeListener( const Reference< XSelectionChangeListener >& _Listener )
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski m_aSelectionListeners.removeInterface( _Listener );
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski
disposing()250*b1cdbd2cSJim Jagielski void disposing()
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski EventObject aEvent( m_rContext );
253*b1cdbd2cSJim Jagielski m_aSelectionListeners.disposeAndClear( aEvent );
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski
~SelectionNotifier()256*b1cdbd2cSJim Jagielski ~SelectionNotifier()
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski
SelectionGuardAccessdbaui::SelectionNotifier::SelectionGuardAccess260*b1cdbd2cSJim Jagielski struct SelectionGuardAccess { friend class SelectionGuard; private: SelectionGuardAccess() { } };
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielski /** enters a block which modifies the selection of our owner.
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski Can be called multiple times, the only important thing is to call leaveSelection
265*b1cdbd2cSJim Jagielski equally often.
266*b1cdbd2cSJim Jagielski */
enterSelection(SelectionGuardAccess)267*b1cdbd2cSJim Jagielski void enterSelection( SelectionGuardAccess )
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski ++m_nSelectionNestingLevel;
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski /** leaves a block which modifies the selection of our owner
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski Must be paired with enterSelection calls.
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielski When the last block is left, i.e. the last leaveSelection call is made on the current stack,
277*b1cdbd2cSJim Jagielski then our SelectionChangeListeners are notified
278*b1cdbd2cSJim Jagielski */
leaveSelection(SelectionGuardAccess)279*b1cdbd2cSJim Jagielski void leaveSelection( SelectionGuardAccess )
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski if ( --m_nSelectionNestingLevel == 0 )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski EventObject aEvent( m_rContext );
284*b1cdbd2cSJim Jagielski m_aSelectionListeners.notifyEach( &XSelectionChangeListener::selectionChanged, aEvent );
285*b1cdbd2cSJim Jagielski }
286*b1cdbd2cSJim Jagielski }
287*b1cdbd2cSJim Jagielski };
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski class SelectionGuard : public ::boost::noncopyable
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski public:
SelectionGuard(SelectionNotifier & _rNotifier)292*b1cdbd2cSJim Jagielski SelectionGuard( SelectionNotifier& _rNotifier )
293*b1cdbd2cSJim Jagielski :m_rNotifier( _rNotifier )
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski m_rNotifier.enterSelection( SelectionNotifier::SelectionGuardAccess() );
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski
~SelectionGuard()298*b1cdbd2cSJim Jagielski ~SelectionGuard()
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski m_rNotifier.leaveSelection( SelectionNotifier::SelectionGuardAccess() );
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski private:
304*b1cdbd2cSJim Jagielski SelectionNotifier& m_rNotifier;
305*b1cdbd2cSJim Jagielski };
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski //====================================================================
308*b1cdbd2cSJim Jagielski //= OApplicationController
309*b1cdbd2cSJim Jagielski //====================================================================
DBG_NAME(OApplicationController)310*b1cdbd2cSJim Jagielski DBG_NAME(OApplicationController)
311*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
312*b1cdbd2cSJim Jagielski OApplicationController::OApplicationController(const Reference< XMultiServiceFactory >& _rxORB)
313*b1cdbd2cSJim Jagielski :OApplicationController_CBASE( _rxORB )
314*b1cdbd2cSJim Jagielski ,m_aContextMenuInterceptors( getMutex() )
315*b1cdbd2cSJim Jagielski ,m_pSubComponentManager( new SubComponentManager( *this, getSharedMutex() ) )
316*b1cdbd2cSJim Jagielski ,m_aTypeCollection(_rxORB)
317*b1cdbd2cSJim Jagielski ,m_aTableCopyHelper(this)
318*b1cdbd2cSJim Jagielski ,m_pClipbordNotifier(NULL)
319*b1cdbd2cSJim Jagielski ,m_nAsyncDrop(0)
320*b1cdbd2cSJim Jagielski ,m_aControllerConnectedEvent( LINK( this, OApplicationController, OnFirstControllerConnected ) )
321*b1cdbd2cSJim Jagielski ,m_aSelectContainerEvent( LINK( this, OApplicationController, OnSelectContainer ) )
322*b1cdbd2cSJim Jagielski ,m_ePreviewMode(E_PREVIEWNONE)
323*b1cdbd2cSJim Jagielski ,m_eCurrentType(E_NONE)
324*b1cdbd2cSJim Jagielski ,m_bNeedToReconnect(sal_False)
325*b1cdbd2cSJim Jagielski ,m_bSuspended( sal_False )
326*b1cdbd2cSJim Jagielski ,m_pSelectionNotifier( new SelectionNotifier( getMutex(), *this ) )
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski DBG_CTOR(OApplicationController,NULL);
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~OApplicationController()331*b1cdbd2cSJim Jagielski OApplicationController::~OApplicationController()
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"Please check who doesn't dispose this component!");
336*b1cdbd2cSJim Jagielski // increment ref count to prevent double call of Dtor
337*b1cdbd2cSJim Jagielski osl_incrementInterlockedCount( &m_refCount );
338*b1cdbd2cSJim Jagielski dispose();
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski ::std::auto_ptr< Window> aTemp( getView() );
341*b1cdbd2cSJim Jagielski clearView();
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski DBG_DTOR(OApplicationController,NULL);
344*b1cdbd2cSJim Jagielski }
345*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
IMPLEMENT_FORWARD_XTYPEPROVIDER2(OApplicationController,OApplicationController_CBASE,OApplicationController_Base)346*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XTYPEPROVIDER2(OApplicationController,OApplicationController_CBASE,OApplicationController_Base)
347*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2(OApplicationController,OApplicationController_CBASE,OApplicationController_Base)
348*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
349*b1cdbd2cSJim Jagielski void OApplicationController::disconnect()
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski if ( m_xDataSourceConnection.is() )
352*b1cdbd2cSJim Jagielski stopConnectionListening( m_xDataSourceConnection );
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski try
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski // temporary (hopefully!) hack for #i55274#
357*b1cdbd2cSJim Jagielski Reference< XFlushable > xFlush( m_xDataSourceConnection, UNO_QUERY );
358*b1cdbd2cSJim Jagielski if ( xFlush.is() && m_xMetaData.is() && !m_xMetaData->isReadOnly() )
359*b1cdbd2cSJim Jagielski xFlush->flush();
360*b1cdbd2cSJim Jagielski }
361*b1cdbd2cSJim Jagielski catch( const Exception& )
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski
366*b1cdbd2cSJim Jagielski m_xDataSourceConnection.clear();
367*b1cdbd2cSJim Jagielski m_xMetaData.clear();
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski InvalidateAll();
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski
372*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
disposing()373*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::disposing()
374*b1cdbd2cSJim Jagielski {
375*b1cdbd2cSJim Jagielski m_aControllerConnectedEvent.CancelCall();
376*b1cdbd2cSJim Jagielski
377*b1cdbd2cSJim Jagielski ::std::for_each(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),XContainerFunctor(this));
378*b1cdbd2cSJim Jagielski m_aCurrentContainers.clear();
379*b1cdbd2cSJim Jagielski m_pSubComponentManager->disposing();
380*b1cdbd2cSJim Jagielski m_pSelectionNotifier->disposing();
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski if ( getView() )
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski getContainer()->showPreview(NULL);
385*b1cdbd2cSJim Jagielski m_pClipbordNotifier->ClearCallbackLink();
386*b1cdbd2cSJim Jagielski m_pClipbordNotifier->AddRemoveListener( getView(), sal_False );
387*b1cdbd2cSJim Jagielski m_pClipbordNotifier->release();
388*b1cdbd2cSJim Jagielski m_pClipbordNotifier = NULL;
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski disconnect();
392*b1cdbd2cSJim Jagielski try
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski Reference < XFrame > xFrame;
395*b1cdbd2cSJim Jagielski attachFrame( xFrame );
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielski if ( m_xDataSource.is() )
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(::rtl::OUString(), this);
400*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_INFO, this);
401*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_URL, this);
402*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_ISPASSWORDREQUIRED, this);
403*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_LAYOUTINFORMATION, this);
404*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_SUPPRESSVERSIONCL, this);
405*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_TABLEFILTER, this);
406*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_TABLETYPEFILTER, this);
407*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener(PROPERTY_USER, this);
408*b1cdbd2cSJim Jagielski // otherwise we may delete our datasource twice
409*b1cdbd2cSJim Jagielski Reference<XPropertySet> xProp = m_xDataSource;
410*b1cdbd2cSJim Jagielski m_xDataSource = NULL;
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski
413*b1cdbd2cSJim Jagielski Reference< XModifyBroadcaster > xBroadcaster( m_xModel, UNO_QUERY );
414*b1cdbd2cSJim Jagielski if ( xBroadcaster.is() )
415*b1cdbd2cSJim Jagielski xBroadcaster->removeModifyListener(static_cast<XModifyListener*>(this));
416*b1cdbd2cSJim Jagielski
417*b1cdbd2cSJim Jagielski if ( m_xModel.is() )
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski ::rtl::OUString sUrl = m_xModel->getURL();
420*b1cdbd2cSJim Jagielski if ( sUrl.getLength() )
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aArgs( m_xModel->getArgs() );
423*b1cdbd2cSJim Jagielski if ( true == aArgs.getOrDefault( "PickListEntry", true ) )
424*b1cdbd2cSJim Jagielski {
425*b1cdbd2cSJim Jagielski ::rtl::OUString aFilter;
426*b1cdbd2cSJim Jagielski INetURLObject aURL( m_xModel->getURL() );
427*b1cdbd2cSJim Jagielski const SfxFilter* pFilter = getStandardDatabaseFilter();
428*b1cdbd2cSJim Jagielski if ( pFilter )
429*b1cdbd2cSJim Jagielski aFilter = pFilter->GetFilterName();
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski // add to svtool history options
432*b1cdbd2cSJim Jagielski SvtHistoryOptions().AppendItem( ePICKLIST,
433*b1cdbd2cSJim Jagielski aURL.GetURLNoPass( INetURLObject::NO_DECODE ),
434*b1cdbd2cSJim Jagielski aFilter,
435*b1cdbd2cSJim Jagielski getStrippedDatabaseName(),
436*b1cdbd2cSJim Jagielski ::rtl::OUString() );
437*b1cdbd2cSJim Jagielski }
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski
440*b1cdbd2cSJim Jagielski m_xModel->disconnectController( this );
441*b1cdbd2cSJim Jagielski
442*b1cdbd2cSJim Jagielski m_xModel.clear();
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski catch(Exception)
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski
450*b1cdbd2cSJim Jagielski clearView();
451*b1cdbd2cSJim Jagielski OApplicationController_CBASE::disposing(); // here the m_refCount must be equal 5
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
Construct(Window * _pParent)455*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::Construct(Window* _pParent)
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski setView( * new OApplicationView( _pParent, getORB(), *this, m_ePreviewMode ) );
458*b1cdbd2cSJim Jagielski getView()->SetUniqueId(UID_APP_VIEW);
459*b1cdbd2cSJim Jagielski
460*b1cdbd2cSJim Jagielski // late construction
461*b1cdbd2cSJim Jagielski sal_Bool bSuccess = sal_False;
462*b1cdbd2cSJim Jagielski try
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski getContainer()->Construct();
465*b1cdbd2cSJim Jagielski bSuccess = sal_True;
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski catch(SQLException&)
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski catch(Exception&)
471*b1cdbd2cSJim Jagielski {
472*b1cdbd2cSJim Jagielski DBG_ERROR("OApplicationController::Construct : the construction of UnoDataBrowserView failed !");
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski if ( !bSuccess )
476*b1cdbd2cSJim Jagielski {
477*b1cdbd2cSJim Jagielski ::std::auto_ptr< Window> aTemp( getView() );
478*b1cdbd2cSJim Jagielski clearView();
479*b1cdbd2cSJim Jagielski return sal_False;
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski // now that we have a view we can create the clipboard listener
483*b1cdbd2cSJim Jagielski m_aSystemClipboard = TransferableDataHelper::CreateFromSystemClipboard( getView() );
484*b1cdbd2cSJim Jagielski m_aSystemClipboard.StartClipboardListening( );
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski m_pClipbordNotifier = new TransferableClipboardListener( LINK( this, OApplicationController, OnClipboardChanged ) );
487*b1cdbd2cSJim Jagielski m_pClipbordNotifier->acquire();
488*b1cdbd2cSJim Jagielski m_pClipbordNotifier->AddRemoveListener( getView(), sal_True );
489*b1cdbd2cSJim Jagielski
490*b1cdbd2cSJim Jagielski OApplicationController_CBASE::Construct( _pParent );
491*b1cdbd2cSJim Jagielski getView()->Show();
492*b1cdbd2cSJim Jagielski
493*b1cdbd2cSJim Jagielski return sal_True;
494*b1cdbd2cSJim Jagielski }
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
disposing(const EventObject & _rSource)497*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::disposing(const EventObject& _rSource) throw( RuntimeException )
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
500*b1cdbd2cSJim Jagielski Reference<XConnection> xCon(_rSource.Source, UNO_QUERY);
501*b1cdbd2cSJim Jagielski if ( xCon.is() )
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski DBG_ASSERT( m_xDataSourceConnection == xCon,
504*b1cdbd2cSJim Jagielski "OApplicationController::disposing: which connection does this come from?" );
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski if ( getContainer() && getContainer()->getElementType() == E_TABLE )
507*b1cdbd2cSJim Jagielski getContainer()->clearPages();
508*b1cdbd2cSJim Jagielski if ( m_xDataSourceConnection == xCon )
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski m_xMetaData.clear();
511*b1cdbd2cSJim Jagielski m_xDataSourceConnection.clear();
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski else if ( _rSource.Source == m_xModel )
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski m_xModel.clear();
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski else if ( _rSource.Source == m_xDataSource )
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski m_xDataSource = NULL;
521*b1cdbd2cSJim Jagielski }
522*b1cdbd2cSJim Jagielski else
523*b1cdbd2cSJim Jagielski {
524*b1cdbd2cSJim Jagielski Reference<XContainer> xContainer( _rSource.Source, UNO_QUERY );
525*b1cdbd2cSJim Jagielski if ( xContainer.is() )
526*b1cdbd2cSJim Jagielski {
527*b1cdbd2cSJim Jagielski TContainerVector::iterator aFind = ::std::find(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),xContainer);
528*b1cdbd2cSJim Jagielski if ( aFind != m_aCurrentContainers.end() )
529*b1cdbd2cSJim Jagielski m_aCurrentContainers.erase(aFind);
530*b1cdbd2cSJim Jagielski }
531*b1cdbd2cSJim Jagielski OApplicationController_CBASE::disposing( _rSource );
532*b1cdbd2cSJim Jagielski }
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
suspend(sal_Bool bSuspend)535*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OApplicationController::suspend(sal_Bool bSuspend) throw( RuntimeException )
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski // notify the OnPrepareViewClosing event (before locking any mutex)
538*b1cdbd2cSJim Jagielski Reference< XDocumentEventBroadcaster > xBroadcaster( m_xModel, UNO_QUERY );
539*b1cdbd2cSJim Jagielski if ( xBroadcaster.is() )
540*b1cdbd2cSJim Jagielski {
541*b1cdbd2cSJim Jagielski xBroadcaster->notifyDocumentEvent(
542*b1cdbd2cSJim Jagielski ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "OnPrepareViewClosing" ) ),
543*b1cdbd2cSJim Jagielski this,
544*b1cdbd2cSJim Jagielski Any()
545*b1cdbd2cSJim Jagielski );
546*b1cdbd2cSJim Jagielski }
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
549*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim Jagielski if ( getView() && getView()->IsInModalMode() )
552*b1cdbd2cSJim Jagielski return sal_False;
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski sal_Bool bCanSuspend = sal_True;
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski if ( m_bSuspended != bSuspend )
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski if ( bSuspend && !closeSubComponents() )
559*b1cdbd2cSJim Jagielski return sal_False;
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim Jagielski Reference<XModifiable> xModi(m_xModel,UNO_QUERY);
562*b1cdbd2cSJim Jagielski Reference<XStorable> xStor(getModel(),UNO_QUERY);
563*b1cdbd2cSJim Jagielski
564*b1cdbd2cSJim Jagielski if ( bSuspend
565*b1cdbd2cSJim Jagielski && xStor.is()
566*b1cdbd2cSJim Jagielski && !xStor->isReadonly()
567*b1cdbd2cSJim Jagielski && ( xModi.is()
568*b1cdbd2cSJim Jagielski && xModi->isModified()
569*b1cdbd2cSJim Jagielski )
570*b1cdbd2cSJim Jagielski )
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski switch (ExecuteQuerySaveDocument(getView(),getStrippedDatabaseName()))
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski case RET_YES:
575*b1cdbd2cSJim Jagielski Execute(ID_BROWSER_SAVEDOC,Sequence<PropertyValue>());
576*b1cdbd2cSJim Jagielski bCanSuspend = !xModi->isModified();
577*b1cdbd2cSJim Jagielski // when we save the document this must be false else some press cancel
578*b1cdbd2cSJim Jagielski break;
579*b1cdbd2cSJim Jagielski case RET_CANCEL:
580*b1cdbd2cSJim Jagielski bCanSuspend = sal_False;
581*b1cdbd2cSJim Jagielski default:
582*b1cdbd2cSJim Jagielski break;
583*b1cdbd2cSJim Jagielski }
584*b1cdbd2cSJim Jagielski }
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski
587*b1cdbd2cSJim Jagielski if ( bCanSuspend )
588*b1cdbd2cSJim Jagielski m_bSuspended = bSuspend;
589*b1cdbd2cSJim Jagielski
590*b1cdbd2cSJim Jagielski return bCanSuspend;
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetState(sal_uInt16 _nId) const593*b1cdbd2cSJim Jagielski FeatureState OApplicationController::GetState(sal_uInt16 _nId) const
594*b1cdbd2cSJim Jagielski {
595*b1cdbd2cSJim Jagielski FeatureState aReturn;
596*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_False;
597*b1cdbd2cSJim Jagielski // check this first
598*b1cdbd2cSJim Jagielski if ( !getContainer() || m_bReadOnly )
599*b1cdbd2cSJim Jagielski return aReturn;
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski try
602*b1cdbd2cSJim Jagielski {
603*b1cdbd2cSJim Jagielski switch (_nId)
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski case SID_OPENURL:
606*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
607*b1cdbd2cSJim Jagielski if ( m_xModel.is() )
608*b1cdbd2cSJim Jagielski aReturn.sTitle = m_xModel->getURL();
609*b1cdbd2cSJim Jagielski break;
610*b1cdbd2cSJim Jagielski case ID_BROWSER_COPY:
611*b1cdbd2cSJim Jagielski {
612*b1cdbd2cSJim Jagielski sal_Int32 nCount = getContainer()->getSelectionCount();
613*b1cdbd2cSJim Jagielski aReturn.bEnabled = nCount >= 1;
614*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled && nCount == 1 && getContainer()->getElementType() == E_TABLE )
615*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->isALeafSelected();
616*b1cdbd2cSJim Jagielski }
617*b1cdbd2cSJim Jagielski break;
618*b1cdbd2cSJim Jagielski case ID_BROWSER_CUT:
619*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && getContainer()->getSelectionCount() >= 1;
620*b1cdbd2cSJim Jagielski aReturn.bEnabled = aReturn.bEnabled && ( (ID_BROWSER_CUT == _nId && getContainer()->getElementType() == E_TABLE) ? getContainer()->isCutAllowed() : sal_True);
621*b1cdbd2cSJim Jagielski break;
622*b1cdbd2cSJim Jagielski case ID_BROWSER_PASTE:
623*b1cdbd2cSJim Jagielski switch( getContainer()->getElementType() )
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski case E_TABLE:
626*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && !isConnectionReadOnly() && isTableFormat();
627*b1cdbd2cSJim Jagielski break;
628*b1cdbd2cSJim Jagielski case E_QUERY:
629*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && getViewClipboard().HasFormat(SOT_FORMATSTR_ID_DBACCESS_QUERY);
630*b1cdbd2cSJim Jagielski break;
631*b1cdbd2cSJim Jagielski default:
632*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && OComponentTransferable::canExtractComponentDescriptor(getViewClipboard().GetDataFlavorExVector(),getContainer()->getElementType() == E_FORM);
633*b1cdbd2cSJim Jagielski }
634*b1cdbd2cSJim Jagielski break;
635*b1cdbd2cSJim Jagielski case SID_DB_APP_PASTE_SPECIAL:
636*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->getElementType() == E_TABLE && !isDataSourceReadOnly() && !isConnectionReadOnly() && isTableFormat();
637*b1cdbd2cSJim Jagielski break;
638*b1cdbd2cSJim Jagielski case SID_OPENDOC:
639*b1cdbd2cSJim Jagielski case SID_HELP_INDEX:
640*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
641*b1cdbd2cSJim Jagielski break;
642*b1cdbd2cSJim Jagielski case ID_BROWSER_SAVEDOC:
643*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && m_xDocumentModify.is() && m_xDocumentModify->isModified();
644*b1cdbd2cSJim Jagielski break;
645*b1cdbd2cSJim Jagielski case ID_BROWSER_SAVEASDOC:
646*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
647*b1cdbd2cSJim Jagielski break;
648*b1cdbd2cSJim Jagielski case ID_BROWSER_SORTUP:
649*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->isFilled() && getContainer()->getElementCount();
650*b1cdbd2cSJim Jagielski aReturn.bChecked = aReturn.bEnabled && getContainer()->isSortUp();
651*b1cdbd2cSJim Jagielski break;
652*b1cdbd2cSJim Jagielski case ID_BROWSER_SORTDOWN:
653*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->isFilled() && getContainer()->getElementCount();
654*b1cdbd2cSJim Jagielski aReturn.bChecked = aReturn.bEnabled && !getContainer()->isSortUp();
655*b1cdbd2cSJim Jagielski break;
656*b1cdbd2cSJim Jagielski
657*b1cdbd2cSJim Jagielski case SID_NEWDOC:
658*b1cdbd2cSJim Jagielski case SID_APP_NEW_FORM:
659*b1cdbd2cSJim Jagielski case ID_DOCUMENT_CREATE_REPWIZ:
660*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SWRITER);
661*b1cdbd2cSJim Jagielski break;
662*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT:
663*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly()
664*b1cdbd2cSJim Jagielski && SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SWRITER);
665*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski Reference< XContentEnumerationAccess > xEnumAccess(m_xServiceFactory, UNO_QUERY);
668*b1cdbd2cSJim Jagielski aReturn.bEnabled = xEnumAccess.is();
669*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
670*b1cdbd2cSJim Jagielski {
671*b1cdbd2cSJim Jagielski const ::rtl::OUString sReportEngineServiceName = ::dbtools::getDefaultReportEngineServiceName(m_xServiceFactory);
672*b1cdbd2cSJim Jagielski aReturn.bEnabled = sReportEngineServiceName.getLength() != 0;
673*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
674*b1cdbd2cSJim Jagielski {
675*b1cdbd2cSJim Jagielski const Reference< XEnumeration > xEnumDrivers = xEnumAccess->createContentEnumeration(sReportEngineServiceName);
676*b1cdbd2cSJim Jagielski aReturn.bEnabled = xEnumDrivers.is() && xEnumDrivers->hasMoreElements();
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski break;
681*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_TABLES:
682*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
683*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getElementType() == E_TABLE;
684*b1cdbd2cSJim Jagielski break;
685*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_QUERIES:
686*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
687*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getElementType() == E_QUERY;
688*b1cdbd2cSJim Jagielski break;
689*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_FORMS:
690*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
691*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getElementType() == E_FORM;
692*b1cdbd2cSJim Jagielski break;
693*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_REPORTS:
694*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
695*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getElementType() == E_REPORT;
696*b1cdbd2cSJim Jagielski break;
697*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_DESIGN:
698*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_SQL:
699*b1cdbd2cSJim Jagielski case ID_APP_NEW_QUERY_AUTO_PILOT:
700*b1cdbd2cSJim Jagielski case SID_DB_FORM_NEW_PILOT:
701*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly();
702*b1cdbd2cSJim Jagielski break;
703*b1cdbd2cSJim Jagielski case ID_NEW_VIEW_DESIGN:
704*b1cdbd2cSJim Jagielski case SID_DB_NEW_VIEW_SQL:
705*b1cdbd2cSJim Jagielski case ID_NEW_VIEW_DESIGN_AUTO_PILOT:
706*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && !isConnectionReadOnly();
707*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
708*b1cdbd2cSJim Jagielski {
709*b1cdbd2cSJim Jagielski Reference<XViewsSupplier> xViewsSup( getConnection(), UNO_QUERY );
710*b1cdbd2cSJim Jagielski aReturn.bEnabled = xViewsSup.is();
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski break;
713*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN:
714*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN_AUTO_PILOT:
715*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && !isConnectionReadOnly();
716*b1cdbd2cSJim Jagielski break;
717*b1cdbd2cSJim Jagielski case ID_DIRECT_SQL:
718*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
719*b1cdbd2cSJim Jagielski break;
720*b1cdbd2cSJim Jagielski case ID_MIGRATE_SCRIPTS:
721*b1cdbd2cSJim Jagielski {
722*b1cdbd2cSJim Jagielski // Our document supports embedding scripts into it, if and only if there are no
723*b1cdbd2cSJim Jagielski // forms/reports with macros/scripts into them. So, we need to enable migration
724*b1cdbd2cSJim Jagielski // if and only if the database document does *not* support embedding scripts.
725*b1cdbd2cSJim Jagielski bool bAvailable =
726*b1cdbd2cSJim Jagielski !Reference< XEmbeddedScripts >( m_xModel, UNO_QUERY ).is()
727*b1cdbd2cSJim Jagielski && !Reference< XStorable >( m_xModel, UNO_QUERY_THROW )->isReadonly();
728*b1cdbd2cSJim Jagielski aReturn.bEnabled = bAvailable;
729*b1cdbd2cSJim Jagielski if ( !bAvailable )
730*b1cdbd2cSJim Jagielski aReturn.bInvisible = true;
731*b1cdbd2cSJim Jagielski }
732*b1cdbd2cSJim Jagielski break;
733*b1cdbd2cSJim Jagielski case SID_APP_NEW_FOLDER:
734*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && getContainer()->getSelectionCount() <= 1;
735*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski const ElementType eType = getContainer()->getElementType();
738*b1cdbd2cSJim Jagielski aReturn.bEnabled = eType == E_REPORT || eType == E_FORM;
739*b1cdbd2cSJim Jagielski }
740*b1cdbd2cSJim Jagielski break;
741*b1cdbd2cSJim Jagielski case SID_FORM_CREATE_REPWIZ_PRE_SEL:
742*b1cdbd2cSJim Jagielski case SID_REPORT_CREATE_REPWIZ_PRE_SEL:
743*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT_PRE_SEL:
744*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly()
745*b1cdbd2cSJim Jagielski && SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SWRITER)
746*b1cdbd2cSJim Jagielski && getContainer()->isALeafSelected();
747*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
748*b1cdbd2cSJim Jagielski {
749*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
750*b1cdbd2cSJim Jagielski aReturn.bEnabled = eType == E_QUERY || eType == E_TABLE;
751*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled && SID_APP_NEW_REPORT_PRE_SEL == _nId )
752*b1cdbd2cSJim Jagielski {
753*b1cdbd2cSJim Jagielski Reference< XContentEnumerationAccess > xEnumAccess(m_xServiceFactory, UNO_QUERY);
754*b1cdbd2cSJim Jagielski aReturn.bEnabled = xEnumAccess.is();
755*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski static ::rtl::OUString s_sReportDesign(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.report.pentaho.SOReportJobFactory"));
758*b1cdbd2cSJim Jagielski Reference< XEnumeration > xEnumDrivers = xEnumAccess->createContentEnumeration(s_sReportDesign);
759*b1cdbd2cSJim Jagielski aReturn.bEnabled = xEnumDrivers.is() && xEnumDrivers->hasMoreElements();
760*b1cdbd2cSJim Jagielski }
761*b1cdbd2cSJim Jagielski }
762*b1cdbd2cSJim Jagielski }
763*b1cdbd2cSJim Jagielski break;
764*b1cdbd2cSJim Jagielski case SID_DB_APP_DELETE:
765*b1cdbd2cSJim Jagielski case SID_DB_APP_RENAME:
766*b1cdbd2cSJim Jagielski aReturn.bEnabled = isRenameDeleteAllowed(getContainer()->getElementType(), _nId == SID_DB_APP_DELETE);
767*b1cdbd2cSJim Jagielski break;
768*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_DELETE:
769*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_RENAME:
770*b1cdbd2cSJim Jagielski aReturn.bEnabled = isRenameDeleteAllowed(E_TABLE, _nId == SID_DB_APP_TABLE_DELETE);
771*b1cdbd2cSJim Jagielski break;
772*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_DELETE:
773*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_RENAME:
774*b1cdbd2cSJim Jagielski aReturn.bEnabled = isRenameDeleteAllowed(E_QUERY, _nId == SID_DB_APP_QUERY_DELETE);
775*b1cdbd2cSJim Jagielski break;
776*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_DELETE:
777*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_RENAME:
778*b1cdbd2cSJim Jagielski aReturn.bEnabled = isRenameDeleteAllowed(E_FORM, _nId == SID_DB_APP_FORM_DELETE);
779*b1cdbd2cSJim Jagielski break;
780*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_DELETE:
781*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_RENAME:
782*b1cdbd2cSJim Jagielski aReturn.bEnabled = isRenameDeleteAllowed(E_REPORT, _nId == SID_DB_APP_REPORT_DELETE);
783*b1cdbd2cSJim Jagielski break;
784*b1cdbd2cSJim Jagielski
785*b1cdbd2cSJim Jagielski case SID_SELECTALL:
786*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->getElementCount() > 0 && getContainer()->getSelectionCount() != getContainer()->getElementCount();
787*b1cdbd2cSJim Jagielski break;
788*b1cdbd2cSJim Jagielski case SID_DB_APP_EDIT:
789*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_EDIT:
790*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_EDIT:
791*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_EDIT:
792*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_EDIT:
793*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && getContainer()->getSelectionCount() > 0
794*b1cdbd2cSJim Jagielski && getContainer()->isALeafSelected();
795*b1cdbd2cSJim Jagielski break;
796*b1cdbd2cSJim Jagielski case SID_DB_APP_EDIT_SQL_VIEW:
797*b1cdbd2cSJim Jagielski if ( isDataSourceReadOnly() )
798*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_False;
799*b1cdbd2cSJim Jagielski else
800*b1cdbd2cSJim Jagielski {
801*b1cdbd2cSJim Jagielski switch ( getContainer()->getElementType() )
802*b1cdbd2cSJim Jagielski {
803*b1cdbd2cSJim Jagielski case E_QUERY:
804*b1cdbd2cSJim Jagielski aReturn.bEnabled = ( getContainer()->getSelectionCount() > 0 )
805*b1cdbd2cSJim Jagielski && ( getContainer()->isALeafSelected() );
806*b1cdbd2cSJim Jagielski break;
807*b1cdbd2cSJim Jagielski case E_TABLE:
808*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_False;
809*b1cdbd2cSJim Jagielski // there's one exception: views which support altering their underlying
810*b1cdbd2cSJim Jagielski // command can be edited in SQL view, too
811*b1cdbd2cSJim Jagielski if ( ( getContainer()->getSelectionCount() > 0 )
812*b1cdbd2cSJim Jagielski && ( getContainer()->isALeafSelected() )
813*b1cdbd2cSJim Jagielski )
814*b1cdbd2cSJim Jagielski {
815*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString > aSelected;
816*b1cdbd2cSJim Jagielski getSelectionElementNames( aSelected );
817*b1cdbd2cSJim Jagielski bool bAlterableViews = true;
818*b1cdbd2cSJim Jagielski for ( ::std::vector< ::rtl::OUString >::const_iterator selectedName = aSelected.begin();
819*b1cdbd2cSJim Jagielski bAlterableViews && ( selectedName != aSelected.end() ) ;
820*b1cdbd2cSJim Jagielski ++selectedName
821*b1cdbd2cSJim Jagielski )
822*b1cdbd2cSJim Jagielski {
823*b1cdbd2cSJim Jagielski bAlterableViews &= impl_isAlterableView_nothrow( *selectedName );
824*b1cdbd2cSJim Jagielski }
825*b1cdbd2cSJim Jagielski aReturn.bEnabled = bAlterableViews;
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski break;
828*b1cdbd2cSJim Jagielski default:
829*b1cdbd2cSJim Jagielski break;
830*b1cdbd2cSJim Jagielski }
831*b1cdbd2cSJim Jagielski }
832*b1cdbd2cSJim Jagielski break;
833*b1cdbd2cSJim Jagielski case SID_DB_APP_OPEN:
834*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_OPEN:
835*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_OPEN:
836*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_OPEN:
837*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_OPEN:
838*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->getSelectionCount() > 0 && getContainer()->isALeafSelected();
839*b1cdbd2cSJim Jagielski break;
840*b1cdbd2cSJim Jagielski case SID_DB_APP_DSUSERADMIN:
841*b1cdbd2cSJim Jagielski aReturn.bEnabled = !m_aTypeCollection.isEmbeddedDatabase(::comphelper::getString(m_xDataSource->getPropertyValue(PROPERTY_URL)));
842*b1cdbd2cSJim Jagielski break;
843*b1cdbd2cSJim Jagielski case SID_DB_APP_DSRELDESIGN:
844*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
845*b1cdbd2cSJim Jagielski break;
846*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLEFILTER:
847*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly();
848*b1cdbd2cSJim Jagielski break;
849*b1cdbd2cSJim Jagielski case SID_DB_APP_REFRESH_TABLES:
850*b1cdbd2cSJim Jagielski aReturn.bEnabled = getContainer()->getElementType() == E_TABLE && isConnected();
851*b1cdbd2cSJim Jagielski break;
852*b1cdbd2cSJim Jagielski case SID_DB_APP_DSPROPS:
853*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is() && m_aTypeCollection.isShowPropertiesEnabled(::comphelper::getString(m_xDataSource->getPropertyValue(PROPERTY_URL)));
854*b1cdbd2cSJim Jagielski break;
855*b1cdbd2cSJim Jagielski case SID_DB_APP_DSCONNECTION_TYPE:
856*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly() && m_xDataSource.is() && !m_aTypeCollection.isEmbeddedDatabase(::comphelper::getString(m_xDataSource->getPropertyValue(PROPERTY_URL)));
857*b1cdbd2cSJim Jagielski break;
858*b1cdbd2cSJim Jagielski case SID_DB_APP_DSADVANCED_SETTINGS:
859*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is() && AdvancedSettingsDialog::doesHaveAnyAdvancedSettings( m_aTypeCollection.getType(::comphelper::getString( m_xDataSource->getPropertyValue( PROPERTY_URL ) )) );
860*b1cdbd2cSJim Jagielski break;
861*b1cdbd2cSJim Jagielski case SID_DB_APP_CONVERTTOVIEW:
862*b1cdbd2cSJim Jagielski aReturn.bEnabled = !isDataSourceReadOnly();
863*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
864*b1cdbd2cSJim Jagielski {
865*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
866*b1cdbd2cSJim Jagielski aReturn.bEnabled = eType == E_QUERY && getContainer()->getSelectionCount() > 0;
867*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
868*b1cdbd2cSJim Jagielski {
869*b1cdbd2cSJim Jagielski Reference<XViewsSupplier> xViewSup( getConnection(), UNO_QUERY );
870*b1cdbd2cSJim Jagielski aReturn.bEnabled = xViewSup.is() && Reference<XAppend>(xViewSup->getViews(),UNO_QUERY).is();
871*b1cdbd2cSJim Jagielski }
872*b1cdbd2cSJim Jagielski }
873*b1cdbd2cSJim Jagielski break;
874*b1cdbd2cSJim Jagielski case SID_DB_APP_DISABLE_PREVIEW:
875*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
876*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getPreviewMode() == E_PREVIEWNONE;
877*b1cdbd2cSJim Jagielski break;
878*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_DOCINFO_PREVIEW:
879*b1cdbd2cSJim Jagielski {
880*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
881*b1cdbd2cSJim Jagielski aReturn.bEnabled = (E_REPORT == eType || E_FORM == eType);
882*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getPreviewMode() == E_DOCUMENTINFO;
883*b1cdbd2cSJim Jagielski }
884*b1cdbd2cSJim Jagielski break;
885*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_DOC_PREVIEW:
886*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
887*b1cdbd2cSJim Jagielski aReturn.bChecked = getContainer()->getPreviewMode() == E_DOCUMENT;
888*b1cdbd2cSJim Jagielski break;
889*b1cdbd2cSJim Jagielski case ID_BROWSER_UNDO:
890*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_False;
891*b1cdbd2cSJim Jagielski break;
892*b1cdbd2cSJim Jagielski case SID_MAIL_SENDDOC:
893*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_True;
894*b1cdbd2cSJim Jagielski break;
895*b1cdbd2cSJim Jagielski case SID_DB_APP_SENDREPORTASMAIL:
896*b1cdbd2cSJim Jagielski {
897*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
898*b1cdbd2cSJim Jagielski aReturn.bEnabled = E_REPORT == eType && getContainer()->getSelectionCount() > 0 && getContainer()->isALeafSelected();
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski break;
901*b1cdbd2cSJim Jagielski case SID_DB_APP_SENDREPORTTOWRITER:
902*b1cdbd2cSJim Jagielski case SID_DB_APP_DBADMIN:
903*b1cdbd2cSJim Jagielski aReturn.bEnabled = sal_False;
904*b1cdbd2cSJim Jagielski break;
905*b1cdbd2cSJim Jagielski case SID_DB_APP_STATUS_TYPE:
906*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is();
907*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
908*b1cdbd2cSJim Jagielski {
909*b1cdbd2cSJim Jagielski ::rtl::OUString sURL;
910*b1cdbd2cSJim Jagielski m_xDataSource->getPropertyValue(PROPERTY_URL) >>= sURL;
911*b1cdbd2cSJim Jagielski ::rtl::OUString sDSTypeName;
912*b1cdbd2cSJim Jagielski if ( m_aTypeCollection.isEmbeddedDatabase( sURL ) )
913*b1cdbd2cSJim Jagielski {
914*b1cdbd2cSJim Jagielski sDSTypeName = String( ModuleRes( RID_STR_EMBEDDED_DATABASE ) );
915*b1cdbd2cSJim Jagielski }
916*b1cdbd2cSJim Jagielski else
917*b1cdbd2cSJim Jagielski {
918*b1cdbd2cSJim Jagielski sDSTypeName = m_aTypeCollection.getTypeDisplayName(sURL);
919*b1cdbd2cSJim Jagielski }
920*b1cdbd2cSJim Jagielski aReturn.sTitle = sDSTypeName;
921*b1cdbd2cSJim Jagielski }
922*b1cdbd2cSJim Jagielski break;
923*b1cdbd2cSJim Jagielski case SID_DB_APP_STATUS_DBNAME:
924*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is();
925*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
926*b1cdbd2cSJim Jagielski {
927*b1cdbd2cSJim Jagielski ::rtl::OUString sURL;
928*b1cdbd2cSJim Jagielski m_xDataSource->getPropertyValue(PROPERTY_URL) >>= sURL;
929*b1cdbd2cSJim Jagielski String sDatabaseName;
930*b1cdbd2cSJim Jagielski String sHostName;
931*b1cdbd2cSJim Jagielski sal_Int32 nPortNumber( -1 );
932*b1cdbd2cSJim Jagielski
933*b1cdbd2cSJim Jagielski m_aTypeCollection.extractHostNamePort( sURL, sDatabaseName, sHostName, nPortNumber );
934*b1cdbd2cSJim Jagielski
935*b1cdbd2cSJim Jagielski if ( !sDatabaseName.Len() )
936*b1cdbd2cSJim Jagielski sDatabaseName = m_aTypeCollection.cutPrefix( sURL );
937*b1cdbd2cSJim Jagielski if ( m_aTypeCollection.isFileSystemBased(sURL) )
938*b1cdbd2cSJim Jagielski {
939*b1cdbd2cSJim Jagielski sDatabaseName = SvtPathOptions().SubstituteVariable( sDatabaseName );
940*b1cdbd2cSJim Jagielski if ( sDatabaseName.Len() )
941*b1cdbd2cSJim Jagielski {
942*b1cdbd2cSJim Jagielski ::svt::OFileNotation aFileNotation(sDatabaseName);
943*b1cdbd2cSJim Jagielski // set this decoded URL as text
944*b1cdbd2cSJim Jagielski sDatabaseName = aFileNotation.get(::svt::OFileNotation::N_SYSTEM);
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski }
947*b1cdbd2cSJim Jagielski
948*b1cdbd2cSJim Jagielski if ( sDatabaseName.Len() == 0 )
949*b1cdbd2cSJim Jagielski sDatabaseName = m_aTypeCollection.getTypeDisplayName( sURL );
950*b1cdbd2cSJim Jagielski
951*b1cdbd2cSJim Jagielski aReturn.sTitle = sDatabaseName;
952*b1cdbd2cSJim Jagielski }
953*b1cdbd2cSJim Jagielski break;
954*b1cdbd2cSJim Jagielski case SID_DB_APP_STATUS_USERNAME:
955*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is();
956*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
957*b1cdbd2cSJim Jagielski m_xDataSource->getPropertyValue( PROPERTY_USER ) >>= aReturn.sTitle;
958*b1cdbd2cSJim Jagielski break;
959*b1cdbd2cSJim Jagielski case SID_DB_APP_STATUS_HOSTNAME:
960*b1cdbd2cSJim Jagielski aReturn.bEnabled = m_xDataSource.is();
961*b1cdbd2cSJim Jagielski if ( aReturn.bEnabled )
962*b1cdbd2cSJim Jagielski {
963*b1cdbd2cSJim Jagielski ::rtl::OUString sURL;
964*b1cdbd2cSJim Jagielski m_xDataSource->getPropertyValue( PROPERTY_URL ) >>= sURL;
965*b1cdbd2cSJim Jagielski
966*b1cdbd2cSJim Jagielski String sHostName, sDatabaseName;
967*b1cdbd2cSJim Jagielski sal_Int32 nPortNumber = -1;
968*b1cdbd2cSJim Jagielski m_aTypeCollection.extractHostNamePort( sURL, sDatabaseName, sHostName, nPortNumber );
969*b1cdbd2cSJim Jagielski aReturn.sTitle = sHostName;
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski break;
972*b1cdbd2cSJim Jagielski default:
973*b1cdbd2cSJim Jagielski aReturn = OApplicationController_CBASE::GetState(_nId);
974*b1cdbd2cSJim Jagielski }
975*b1cdbd2cSJim Jagielski }
976*b1cdbd2cSJim Jagielski catch(const Exception& )
977*b1cdbd2cSJim Jagielski {
978*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
979*b1cdbd2cSJim Jagielski }
980*b1cdbd2cSJim Jagielski return aReturn;
981*b1cdbd2cSJim Jagielski }
982*b1cdbd2cSJim Jagielski
983*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
984*b1cdbd2cSJim Jagielski namespace
985*b1cdbd2cSJim Jagielski {
lcl_handleException_nothrow(const Reference<XModel> & _rxDocument,const Any & _rException)986*b1cdbd2cSJim Jagielski bool lcl_handleException_nothrow( const Reference< XModel >& _rxDocument, const Any& _rException )
987*b1cdbd2cSJim Jagielski {
988*b1cdbd2cSJim Jagielski bool bHandled = false;
989*b1cdbd2cSJim Jagielski
990*b1cdbd2cSJim Jagielski // try handling the error with an interaction handler
991*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aArgs( _rxDocument->getArgs() );
992*b1cdbd2cSJim Jagielski Reference< XInteractionHandler > xHandler( aArgs.getOrDefault( "InteractionHandler", Reference< XInteractionHandler >() ) );
993*b1cdbd2cSJim Jagielski if ( xHandler.is() )
994*b1cdbd2cSJim Jagielski {
995*b1cdbd2cSJim Jagielski ::rtl::Reference< ::comphelper::OInteractionRequest > pRequest( new ::comphelper::OInteractionRequest( _rException ) );
996*b1cdbd2cSJim Jagielski ::rtl::Reference< ::comphelper::OInteractionApprove > pApprove( new ::comphelper::OInteractionApprove );
997*b1cdbd2cSJim Jagielski pRequest->addContinuation( pApprove.get() );
998*b1cdbd2cSJim Jagielski
999*b1cdbd2cSJim Jagielski try
1000*b1cdbd2cSJim Jagielski {
1001*b1cdbd2cSJim Jagielski xHandler->handle( pRequest.get() );
1002*b1cdbd2cSJim Jagielski }
1003*b1cdbd2cSJim Jagielski catch( const Exception& )
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
1006*b1cdbd2cSJim Jagielski }
1007*b1cdbd2cSJim Jagielski
1008*b1cdbd2cSJim Jagielski bHandled = pApprove->wasSelected();
1009*b1cdbd2cSJim Jagielski }
1010*b1cdbd2cSJim Jagielski return bHandled;
1011*b1cdbd2cSJim Jagielski }
1012*b1cdbd2cSJim Jagielski }
1013*b1cdbd2cSJim Jagielski
1014*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
Execute(sal_uInt16 _nId,const Sequence<PropertyValue> & aArgs)1015*b1cdbd2cSJim Jagielski void OApplicationController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue >& aArgs)
1016*b1cdbd2cSJim Jagielski {
1017*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
1018*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
1019*b1cdbd2cSJim Jagielski
1020*b1cdbd2cSJim Jagielski if ( isUserDefinedFeature( _nId ) )
1021*b1cdbd2cSJim Jagielski {
1022*b1cdbd2cSJim Jagielski OApplicationController_CBASE::Execute( _nId, aArgs );
1023*b1cdbd2cSJim Jagielski return;
1024*b1cdbd2cSJim Jagielski }
1025*b1cdbd2cSJim Jagielski
1026*b1cdbd2cSJim Jagielski if ( !getContainer() || m_bReadOnly )
1027*b1cdbd2cSJim Jagielski return; // return without execution
1028*b1cdbd2cSJim Jagielski
1029*b1cdbd2cSJim Jagielski try
1030*b1cdbd2cSJim Jagielski {
1031*b1cdbd2cSJim Jagielski switch(_nId)
1032*b1cdbd2cSJim Jagielski {
1033*b1cdbd2cSJim Jagielski case ID_BROWSER_CUT:
1034*b1cdbd2cSJim Jagielski getContainer()->cut();
1035*b1cdbd2cSJim Jagielski break;
1036*b1cdbd2cSJim Jagielski case ID_BROWSER_COPY:
1037*b1cdbd2cSJim Jagielski {
1038*b1cdbd2cSJim Jagielski TransferableHelper* pTransfer = copyObject( );
1039*b1cdbd2cSJim Jagielski Reference< XTransferable> aEnsureDelete = pTransfer;
1040*b1cdbd2cSJim Jagielski
1041*b1cdbd2cSJim Jagielski if ( pTransfer )
1042*b1cdbd2cSJim Jagielski pTransfer->CopyToClipboard(getView());
1043*b1cdbd2cSJim Jagielski }
1044*b1cdbd2cSJim Jagielski break;
1045*b1cdbd2cSJim Jagielski case ID_BROWSER_PASTE:
1046*b1cdbd2cSJim Jagielski {
1047*b1cdbd2cSJim Jagielski const TransferableDataHelper& rTransferData( getViewClipboard() );
1048*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
1049*b1cdbd2cSJim Jagielski
1050*b1cdbd2cSJim Jagielski switch( eType )
1051*b1cdbd2cSJim Jagielski {
1052*b1cdbd2cSJim Jagielski case E_TABLE:
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski // get the selected tablename
1055*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString > aList;
1056*b1cdbd2cSJim Jagielski getSelectionElementNames( aList );
1057*b1cdbd2cSJim Jagielski if ( !aList.empty() )
1058*b1cdbd2cSJim Jagielski m_aTableCopyHelper.SetTableNameForAppend( *aList.begin() );
1059*b1cdbd2cSJim Jagielski else
1060*b1cdbd2cSJim Jagielski m_aTableCopyHelper.ResetTableNameForAppend();
1061*b1cdbd2cSJim Jagielski
1062*b1cdbd2cSJim Jagielski m_aTableCopyHelper.pasteTable( rTransferData , getDatabaseName(), ensureConnection() );
1063*b1cdbd2cSJim Jagielski }
1064*b1cdbd2cSJim Jagielski break;
1065*b1cdbd2cSJim Jagielski
1066*b1cdbd2cSJim Jagielski case E_QUERY:
1067*b1cdbd2cSJim Jagielski if ( rTransferData.HasFormat(SOT_FORMATSTR_ID_DBACCESS_QUERY) )
1068*b1cdbd2cSJim Jagielski paste( E_QUERY, ODataAccessObjectTransferable::extractObjectDescriptor( rTransferData ) );
1069*b1cdbd2cSJim Jagielski break;
1070*b1cdbd2cSJim Jagielski default:
1071*b1cdbd2cSJim Jagielski {
1072*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString> aList;
1073*b1cdbd2cSJim Jagielski getSelectionElementNames(aList);
1074*b1cdbd2cSJim Jagielski ::rtl::OUString sFolderNameToInsertInto;
1075*b1cdbd2cSJim Jagielski if ( !aList.empty() )
1076*b1cdbd2cSJim Jagielski {
1077*b1cdbd2cSJim Jagielski Reference< XHierarchicalNameAccess > xContainer(getElements(eType),UNO_QUERY);
1078*b1cdbd2cSJim Jagielski if ( xContainer.is()
1079*b1cdbd2cSJim Jagielski && xContainer->hasByHierarchicalName(*aList.begin())
1080*b1cdbd2cSJim Jagielski && (xContainer->getByHierarchicalName(*aList.begin()) >>= xContainer)
1081*b1cdbd2cSJim Jagielski && xContainer.is()
1082*b1cdbd2cSJim Jagielski )
1083*b1cdbd2cSJim Jagielski sFolderNameToInsertInto = *aList.begin();
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski paste( eType, OComponentTransferable::extractComponentDescriptor( rTransferData ),
1086*b1cdbd2cSJim Jagielski sFolderNameToInsertInto );
1087*b1cdbd2cSJim Jagielski }
1088*b1cdbd2cSJim Jagielski break;
1089*b1cdbd2cSJim Jagielski }
1090*b1cdbd2cSJim Jagielski }
1091*b1cdbd2cSJim Jagielski break;
1092*b1cdbd2cSJim Jagielski case SID_DB_APP_PASTE_SPECIAL:
1093*b1cdbd2cSJim Jagielski {
1094*b1cdbd2cSJim Jagielski if ( !aArgs.getLength() )
1095*b1cdbd2cSJim Jagielski {
1096*b1cdbd2cSJim Jagielski SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1097*b1cdbd2cSJim Jagielski ::std::auto_ptr<SfxAbstractPasteDialog> pDlg(pFact->CreatePasteDialog( getView() ));
1098*b1cdbd2cSJim Jagielski ::std::vector<SotFormatStringId> aFormatIds;
1099*b1cdbd2cSJim Jagielski getSupportedFormats(getContainer()->getElementType(),aFormatIds);
1100*b1cdbd2cSJim Jagielski const ::std::vector<SotFormatStringId>::iterator aEnd = aFormatIds.end();
1101*b1cdbd2cSJim Jagielski ::rtl::OUString sEmpty;
1102*b1cdbd2cSJim Jagielski for (::std::vector<SotFormatStringId>::iterator aIter = aFormatIds.begin();aIter != aEnd; ++aIter)
1103*b1cdbd2cSJim Jagielski pDlg->Insert(*aIter,sEmpty);
1104*b1cdbd2cSJim Jagielski
1105*b1cdbd2cSJim Jagielski const TransferableDataHelper& rClipboard = getViewClipboard();
1106*b1cdbd2cSJim Jagielski pasteFormat(pDlg->GetFormat(rClipboard.GetTransferable()));
1107*b1cdbd2cSJim Jagielski }
1108*b1cdbd2cSJim Jagielski else
1109*b1cdbd2cSJim Jagielski {
1110*b1cdbd2cSJim Jagielski const PropertyValue* pIter = aArgs.getConstArray();
1111*b1cdbd2cSJim Jagielski const PropertyValue* pEnd = pIter + aArgs.getLength();
1112*b1cdbd2cSJim Jagielski for( ; pIter != pEnd ; ++pIter)
1113*b1cdbd2cSJim Jagielski {
1114*b1cdbd2cSJim Jagielski if ( pIter->Name.equalsAscii("FormatStringId") )
1115*b1cdbd2cSJim Jagielski {
1116*b1cdbd2cSJim Jagielski SotFormatStringId nFormatId = 0;
1117*b1cdbd2cSJim Jagielski if ( pIter->Value >>= nFormatId )
1118*b1cdbd2cSJim Jagielski pasteFormat(nFormatId);
1119*b1cdbd2cSJim Jagielski break;
1120*b1cdbd2cSJim Jagielski }
1121*b1cdbd2cSJim Jagielski }
1122*b1cdbd2cSJim Jagielski }
1123*b1cdbd2cSJim Jagielski }
1124*b1cdbd2cSJim Jagielski break;
1125*b1cdbd2cSJim Jagielski case SID_OPENDOC:
1126*b1cdbd2cSJim Jagielski case SID_HELP_INDEX:
1127*b1cdbd2cSJim Jagielski {
1128*b1cdbd2cSJim Jagielski Reference < XDispatchProvider > xProv( getFrame(), UNO_QUERY );
1129*b1cdbd2cSJim Jagielski if ( xProv.is() )
1130*b1cdbd2cSJim Jagielski {
1131*b1cdbd2cSJim Jagielski URL aURL;
1132*b1cdbd2cSJim Jagielski switch(_nId)
1133*b1cdbd2cSJim Jagielski {
1134*b1cdbd2cSJim Jagielski case SID_HELP_INDEX:
1135*b1cdbd2cSJim Jagielski aURL.Complete = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:HelpIndex"));
1136*b1cdbd2cSJim Jagielski break;
1137*b1cdbd2cSJim Jagielski case SID_OPENDOC:
1138*b1cdbd2cSJim Jagielski aURL.Complete = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:Open"));
1139*b1cdbd2cSJim Jagielski break;
1140*b1cdbd2cSJim Jagielski }
1141*b1cdbd2cSJim Jagielski
1142*b1cdbd2cSJim Jagielski if ( m_xUrlTransformer.is() )
1143*b1cdbd2cSJim Jagielski m_xUrlTransformer->parseStrict( aURL );
1144*b1cdbd2cSJim Jagielski Reference < XDispatch > xDisp = xProv->queryDispatch( aURL, String(), 0 );
1145*b1cdbd2cSJim Jagielski if ( xDisp.is() )
1146*b1cdbd2cSJim Jagielski xDisp->dispatch( aURL, Sequence < PropertyValue >() );
1147*b1cdbd2cSJim Jagielski }
1148*b1cdbd2cSJim Jagielski }
1149*b1cdbd2cSJim Jagielski break;
1150*b1cdbd2cSJim Jagielski case ID_BROWSER_SAVEDOC:
1151*b1cdbd2cSJim Jagielski {
1152*b1cdbd2cSJim Jagielski Reference< XStorable > xStore( m_xModel, UNO_QUERY_THROW );
1153*b1cdbd2cSJim Jagielski try
1154*b1cdbd2cSJim Jagielski {
1155*b1cdbd2cSJim Jagielski xStore->store();
1156*b1cdbd2cSJim Jagielski }
1157*b1cdbd2cSJim Jagielski catch( const Exception& )
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski lcl_handleException_nothrow( m_xModel, ::cppu::getCaughtException() );
1160*b1cdbd2cSJim Jagielski }
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski break;
1163*b1cdbd2cSJim Jagielski
1164*b1cdbd2cSJim Jagielski case ID_BROWSER_SAVEASDOC:
1165*b1cdbd2cSJim Jagielski {
1166*b1cdbd2cSJim Jagielski WinBits nBits(WB_STDMODAL|WB_SAVEAS);
1167*b1cdbd2cSJim Jagielski ::rtl::OUString sUrl;
1168*b1cdbd2cSJim Jagielski if ( m_xModel.is() )
1169*b1cdbd2cSJim Jagielski sUrl = m_xModel->getURL();
1170*b1cdbd2cSJim Jagielski if ( !sUrl.getLength() )
1171*b1cdbd2cSJim Jagielski sUrl = SvtPathOptions().GetWorkPath();
1172*b1cdbd2cSJim Jagielski
1173*b1cdbd2cSJim Jagielski ::sfx2::FileDialogHelper aFileDlg( com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_AUTOEXTENSION,static_cast<sal_uInt32>(nBits) ,getView());
1174*b1cdbd2cSJim Jagielski aFileDlg.SetDisplayDirectory( sUrl );
1175*b1cdbd2cSJim Jagielski
1176*b1cdbd2cSJim Jagielski const SfxFilter* pFilter = getStandardDatabaseFilter();
1177*b1cdbd2cSJim Jagielski if ( pFilter )
1178*b1cdbd2cSJim Jagielski {
1179*b1cdbd2cSJim Jagielski aFileDlg.AddFilter(pFilter->GetUIName(),pFilter->GetDefaultExtension());
1180*b1cdbd2cSJim Jagielski aFileDlg.SetCurrentFilter(pFilter->GetUIName());
1181*b1cdbd2cSJim Jagielski }
1182*b1cdbd2cSJim Jagielski
1183*b1cdbd2cSJim Jagielski if ( aFileDlg.Execute() != ERRCODE_NONE )
1184*b1cdbd2cSJim Jagielski break;
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski Reference<XStorable> xStore( m_xModel, UNO_QUERY_THROW );
1187*b1cdbd2cSJim Jagielski INetURLObject aURL( aFileDlg.GetPath() );
1188*b1cdbd2cSJim Jagielski try
1189*b1cdbd2cSJim Jagielski {
1190*b1cdbd2cSJim Jagielski xStore->storeAsURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), Sequence< PropertyValue >() );
1191*b1cdbd2cSJim Jagielski }
1192*b1cdbd2cSJim Jagielski catch( const Exception& )
1193*b1cdbd2cSJim Jagielski {
1194*b1cdbd2cSJim Jagielski lcl_handleException_nothrow( m_xModel, ::cppu::getCaughtException() );
1195*b1cdbd2cSJim Jagielski }
1196*b1cdbd2cSJim Jagielski
1197*b1cdbd2cSJim Jagielski /*updateTitle();*/
1198*b1cdbd2cSJim Jagielski m_bCurrentlyModified = sal_False;
1199*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_SAVEDOC);
1200*b1cdbd2cSJim Jagielski if ( getContainer()->getElementType() == E_NONE )
1201*b1cdbd2cSJim Jagielski {
1202*b1cdbd2cSJim Jagielski getContainer()->selectContainer(E_NONE);
1203*b1cdbd2cSJim Jagielski getContainer()->selectContainer(E_TABLE);
1204*b1cdbd2cSJim Jagielski // #i95524#
1205*b1cdbd2cSJim Jagielski getContainer()->Invalidate();
1206*b1cdbd2cSJim Jagielski refreshTables();
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski
1209*b1cdbd2cSJim Jagielski }
1210*b1cdbd2cSJim Jagielski break;
1211*b1cdbd2cSJim Jagielski case ID_BROWSER_SORTUP:
1212*b1cdbd2cSJim Jagielski getContainer()->sortUp();
1213*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_SORTDOWN);
1214*b1cdbd2cSJim Jagielski break;
1215*b1cdbd2cSJim Jagielski case ID_BROWSER_SORTDOWN:
1216*b1cdbd2cSJim Jagielski getContainer()->sortDown();
1217*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_SORTUP);
1218*b1cdbd2cSJim Jagielski break;
1219*b1cdbd2cSJim Jagielski
1220*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN_AUTO_PILOT:
1221*b1cdbd2cSJim Jagielski case ID_NEW_VIEW_DESIGN_AUTO_PILOT:
1222*b1cdbd2cSJim Jagielski case ID_APP_NEW_QUERY_AUTO_PILOT:
1223*b1cdbd2cSJim Jagielski case SID_DB_FORM_NEW_PILOT:
1224*b1cdbd2cSJim Jagielski case SID_REPORT_CREATE_REPWIZ_PRE_SEL:
1225*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT_PRE_SEL:
1226*b1cdbd2cSJim Jagielski case SID_FORM_CREATE_REPWIZ_PRE_SEL:
1227*b1cdbd2cSJim Jagielski case ID_DOCUMENT_CREATE_REPWIZ:
1228*b1cdbd2cSJim Jagielski case SID_APP_NEW_FORM:
1229*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT:
1230*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_SQL:
1231*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_DESIGN:
1232*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN:
1233*b1cdbd2cSJim Jagielski {
1234*b1cdbd2cSJim Jagielski ElementType eType = E_TABLE;
1235*b1cdbd2cSJim Jagielski sal_Bool bAutoPilot = sal_False;
1236*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aCreationArgs;
1237*b1cdbd2cSJim Jagielski
1238*b1cdbd2cSJim Jagielski switch( _nId )
1239*b1cdbd2cSJim Jagielski {
1240*b1cdbd2cSJim Jagielski case SID_DB_FORM_NEW_PILOT:
1241*b1cdbd2cSJim Jagielski case SID_FORM_CREATE_REPWIZ_PRE_SEL:
1242*b1cdbd2cSJim Jagielski bAutoPilot = sal_True;
1243*b1cdbd2cSJim Jagielski // run through
1244*b1cdbd2cSJim Jagielski case SID_APP_NEW_FORM:
1245*b1cdbd2cSJim Jagielski eType = E_FORM;
1246*b1cdbd2cSJim Jagielski break;
1247*b1cdbd2cSJim Jagielski case ID_DOCUMENT_CREATE_REPWIZ:
1248*b1cdbd2cSJim Jagielski case SID_REPORT_CREATE_REPWIZ_PRE_SEL:
1249*b1cdbd2cSJim Jagielski bAutoPilot = sal_True;
1250*b1cdbd2cSJim Jagielski // run through
1251*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT:
1252*b1cdbd2cSJim Jagielski case SID_APP_NEW_REPORT_PRE_SEL:
1253*b1cdbd2cSJim Jagielski eType = E_REPORT;
1254*b1cdbd2cSJim Jagielski break;
1255*b1cdbd2cSJim Jagielski case ID_APP_NEW_QUERY_AUTO_PILOT:
1256*b1cdbd2cSJim Jagielski bAutoPilot = sal_True;
1257*b1cdbd2cSJim Jagielski eType = E_QUERY;
1258*b1cdbd2cSJim Jagielski break;
1259*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_DESIGN:
1260*b1cdbd2cSJim Jagielski aCreationArgs.put( (::rtl::OUString)PROPERTY_GRAPHICAL_DESIGN, sal_True );
1261*b1cdbd2cSJim Jagielski // run through
1262*b1cdbd2cSJim Jagielski case ID_NEW_QUERY_SQL:
1263*b1cdbd2cSJim Jagielski eType = E_QUERY;
1264*b1cdbd2cSJim Jagielski break;
1265*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN_AUTO_PILOT:
1266*b1cdbd2cSJim Jagielski bAutoPilot = sal_True;
1267*b1cdbd2cSJim Jagielski // run through
1268*b1cdbd2cSJim Jagielski case ID_NEW_TABLE_DESIGN:
1269*b1cdbd2cSJim Jagielski break;
1270*b1cdbd2cSJim Jagielski default:
1271*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"illegal switch call!");
1272*b1cdbd2cSJim Jagielski }
1273*b1cdbd2cSJim Jagielski if ( bAutoPilot )
1274*b1cdbd2cSJim Jagielski getContainer()->PostUserEvent( LINK( this, OApplicationController, OnCreateWithPilot ), reinterpret_cast< void* >( eType ) );
1275*b1cdbd2cSJim Jagielski else
1276*b1cdbd2cSJim Jagielski {
1277*b1cdbd2cSJim Jagielski Reference< XComponent > xDocDefinition;
1278*b1cdbd2cSJim Jagielski newElement( eType, aCreationArgs, xDocDefinition );
1279*b1cdbd2cSJim Jagielski }
1280*b1cdbd2cSJim Jagielski }
1281*b1cdbd2cSJim Jagielski break;
1282*b1cdbd2cSJim Jagielski case SID_APP_NEW_FOLDER:
1283*b1cdbd2cSJim Jagielski {
1284*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
1285*b1cdbd2cSJim Jagielski ::rtl::OUString sName = getContainer()->getQualifiedName( NULL );
1286*b1cdbd2cSJim Jagielski insertHierachyElement(eType,sName);
1287*b1cdbd2cSJim Jagielski }
1288*b1cdbd2cSJim Jagielski break;
1289*b1cdbd2cSJim Jagielski case ID_NEW_VIEW_DESIGN:
1290*b1cdbd2cSJim Jagielski case SID_DB_NEW_VIEW_SQL:
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1293*b1cdbd2cSJim Jagielski if ( xConnection.is() )
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski QueryDesigner aDesigner( getORB(), this, getFrame(), true );
1296*b1cdbd2cSJim Jagielski
1297*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aCreationArgs;
1298*b1cdbd2cSJim Jagielski aCreationArgs.put( (::rtl::OUString)PROPERTY_GRAPHICAL_DESIGN, ID_NEW_VIEW_DESIGN == _nId );
1299*b1cdbd2cSJim Jagielski
1300*b1cdbd2cSJim Jagielski const Reference< XDataSource > xDataSource( m_xDataSource, UNO_QUERY );
1301*b1cdbd2cSJim Jagielski const Reference< XComponent > xComponent( aDesigner.createNew( xDataSource, aCreationArgs ), UNO_QUERY );
1302*b1cdbd2cSJim Jagielski onDocumentOpened( ::rtl::OUString(), E_QUERY, E_OPEN_DESIGN, xComponent, NULL );
1303*b1cdbd2cSJim Jagielski }
1304*b1cdbd2cSJim Jagielski }
1305*b1cdbd2cSJim Jagielski break;
1306*b1cdbd2cSJim Jagielski case SID_DB_APP_DELETE:
1307*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_DELETE:
1308*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_DELETE:
1309*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_DELETE:
1310*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_DELETE:
1311*b1cdbd2cSJim Jagielski deleteEntries();
1312*b1cdbd2cSJim Jagielski break;
1313*b1cdbd2cSJim Jagielski case SID_DB_APP_RENAME:
1314*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_RENAME:
1315*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_RENAME:
1316*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_RENAME:
1317*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_RENAME:
1318*b1cdbd2cSJim Jagielski renameEntry();
1319*b1cdbd2cSJim Jagielski break;
1320*b1cdbd2cSJim Jagielski case SID_DB_APP_EDIT:
1321*b1cdbd2cSJim Jagielski case SID_DB_APP_EDIT_SQL_VIEW:
1322*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_EDIT:
1323*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_EDIT:
1324*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_EDIT:
1325*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_EDIT:
1326*b1cdbd2cSJim Jagielski doAction( _nId, E_OPEN_DESIGN );
1327*b1cdbd2cSJim Jagielski break;
1328*b1cdbd2cSJim Jagielski case SID_DB_APP_OPEN:
1329*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLE_OPEN:
1330*b1cdbd2cSJim Jagielski case SID_DB_APP_QUERY_OPEN:
1331*b1cdbd2cSJim Jagielski case SID_DB_APP_FORM_OPEN:
1332*b1cdbd2cSJim Jagielski case SID_DB_APP_REPORT_OPEN:
1333*b1cdbd2cSJim Jagielski doAction( _nId, E_OPEN_NORMAL );
1334*b1cdbd2cSJim Jagielski break;
1335*b1cdbd2cSJim Jagielski case SID_DB_APP_CONVERTTOVIEW:
1336*b1cdbd2cSJim Jagielski doAction( _nId, E_OPEN_NORMAL );
1337*b1cdbd2cSJim Jagielski break;
1338*b1cdbd2cSJim Jagielski case SID_SELECTALL:
1339*b1cdbd2cSJim Jagielski getContainer()->selectAll();
1340*b1cdbd2cSJim Jagielski InvalidateAll();
1341*b1cdbd2cSJim Jagielski break;
1342*b1cdbd2cSJim Jagielski case SID_DB_APP_DSRELDESIGN:
1343*b1cdbd2cSJim Jagielski {
1344*b1cdbd2cSJim Jagielski Reference< XComponent > xRelationDesigner;
1345*b1cdbd2cSJim Jagielski if ( !m_pSubComponentManager->activateSubFrame( ::rtl::OUString(), SID_DB_APP_DSRELDESIGN, E_OPEN_DESIGN, xRelationDesigner ) )
1346*b1cdbd2cSJim Jagielski {
1347*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1348*b1cdbd2cSJim Jagielski if ( xConnection.is() )
1349*b1cdbd2cSJim Jagielski {
1350*b1cdbd2cSJim Jagielski RelationDesigner aDesigner( getORB(), this, m_aCurrentFrame.getFrame() );
1351*b1cdbd2cSJim Jagielski
1352*b1cdbd2cSJim Jagielski const Reference< XDataSource > xDataSource( m_xDataSource, UNO_QUERY );
1353*b1cdbd2cSJim Jagielski const Reference< XComponent > xComponent( aDesigner.createNew( xDataSource ), UNO_QUERY );
1354*b1cdbd2cSJim Jagielski onDocumentOpened( ::rtl::OUString(), SID_DB_APP_DSRELDESIGN, E_OPEN_DESIGN, xComponent, NULL );
1355*b1cdbd2cSJim Jagielski }
1356*b1cdbd2cSJim Jagielski }
1357*b1cdbd2cSJim Jagielski }
1358*b1cdbd2cSJim Jagielski break;
1359*b1cdbd2cSJim Jagielski case SID_DB_APP_DSUSERADMIN:
1360*b1cdbd2cSJim Jagielski {
1361*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1362*b1cdbd2cSJim Jagielski if ( xConnection.is() )
1363*b1cdbd2cSJim Jagielski openDialog(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.UserAdministrationDialog")));
1364*b1cdbd2cSJim Jagielski }
1365*b1cdbd2cSJim Jagielski break;
1366*b1cdbd2cSJim Jagielski case SID_DB_APP_TABLEFILTER:
1367*b1cdbd2cSJim Jagielski openTableFilterDialog();
1368*b1cdbd2cSJim Jagielski askToReconnect();
1369*b1cdbd2cSJim Jagielski break;
1370*b1cdbd2cSJim Jagielski case SID_DB_APP_REFRESH_TABLES:
1371*b1cdbd2cSJim Jagielski refreshTables();
1372*b1cdbd2cSJim Jagielski break;
1373*b1cdbd2cSJim Jagielski case SID_DB_APP_DSPROPS:
1374*b1cdbd2cSJim Jagielski openDataSourceAdminDialog();
1375*b1cdbd2cSJim Jagielski askToReconnect();
1376*b1cdbd2cSJim Jagielski break;
1377*b1cdbd2cSJim Jagielski case SID_DB_APP_DSADVANCED_SETTINGS:
1378*b1cdbd2cSJim Jagielski openDialog(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.AdvancedDatabaseSettingsDialog")));
1379*b1cdbd2cSJim Jagielski askToReconnect();
1380*b1cdbd2cSJim Jagielski break;
1381*b1cdbd2cSJim Jagielski case SID_DB_APP_DSCONNECTION_TYPE:
1382*b1cdbd2cSJim Jagielski openDialog(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdb.DataSourceTypeChangeDialog")));
1383*b1cdbd2cSJim Jagielski askToReconnect();
1384*b1cdbd2cSJim Jagielski break;
1385*b1cdbd2cSJim Jagielski case ID_DIRECT_SQL:
1386*b1cdbd2cSJim Jagielski {
1387*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1388*b1cdbd2cSJim Jagielski if ( xConnection.is() )
1389*b1cdbd2cSJim Jagielski openDirectSQLDialog();
1390*b1cdbd2cSJim Jagielski }
1391*b1cdbd2cSJim Jagielski break;
1392*b1cdbd2cSJim Jagielski case ID_MIGRATE_SCRIPTS:
1393*b1cdbd2cSJim Jagielski impl_migrateScripts_nothrow();
1394*b1cdbd2cSJim Jagielski break;
1395*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_TABLES:
1396*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.Call( reinterpret_cast< void* >( E_TABLE ) );
1397*b1cdbd2cSJim Jagielski break;
1398*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_QUERIES:
1399*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.Call( reinterpret_cast< void* >( E_QUERY ) );
1400*b1cdbd2cSJim Jagielski break;
1401*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_FORMS:
1402*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.Call( reinterpret_cast< void* >( E_FORM ) );
1403*b1cdbd2cSJim Jagielski break;
1404*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_REPORTS:
1405*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.Call( reinterpret_cast< void* >( E_REPORT ) );
1406*b1cdbd2cSJim Jagielski break;
1407*b1cdbd2cSJim Jagielski case SID_DB_APP_DISABLE_PREVIEW:
1408*b1cdbd2cSJim Jagielski m_ePreviewMode = E_PREVIEWNONE;
1409*b1cdbd2cSJim Jagielski getContainer()->switchPreview(m_ePreviewMode);
1410*b1cdbd2cSJim Jagielski break;
1411*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_DOCINFO_PREVIEW:
1412*b1cdbd2cSJim Jagielski m_ePreviewMode = E_DOCUMENTINFO;
1413*b1cdbd2cSJim Jagielski getContainer()->switchPreview(m_ePreviewMode);
1414*b1cdbd2cSJim Jagielski break;
1415*b1cdbd2cSJim Jagielski case SID_DB_APP_VIEW_DOC_PREVIEW:
1416*b1cdbd2cSJim Jagielski m_ePreviewMode = E_DOCUMENT;
1417*b1cdbd2cSJim Jagielski getContainer()->switchPreview(m_ePreviewMode);
1418*b1cdbd2cSJim Jagielski break;
1419*b1cdbd2cSJim Jagielski case SID_MAIL_SENDDOC:
1420*b1cdbd2cSJim Jagielski {
1421*b1cdbd2cSJim Jagielski SfxMailModel aSendMail;
1422*b1cdbd2cSJim Jagielski if ( aSendMail.AttachDocument(rtl::OUString(),getModel(), rtl::OUString()) == SfxMailModel::SEND_MAIL_OK )
1423*b1cdbd2cSJim Jagielski aSendMail.Send( getFrame() );
1424*b1cdbd2cSJim Jagielski }
1425*b1cdbd2cSJim Jagielski break;
1426*b1cdbd2cSJim Jagielski case SID_DB_APP_SENDREPORTASMAIL:
1427*b1cdbd2cSJim Jagielski doAction( _nId, E_OPEN_FOR_MAIL );
1428*b1cdbd2cSJim Jagielski break;
1429*b1cdbd2cSJim Jagielski }
1430*b1cdbd2cSJim Jagielski }
1431*b1cdbd2cSJim Jagielski catch( const Exception& )
1432*b1cdbd2cSJim Jagielski {
1433*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
1434*b1cdbd2cSJim Jagielski }
1435*b1cdbd2cSJim Jagielski InvalidateFeature(_nId);
1436*b1cdbd2cSJim Jagielski }
1437*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
describeSupportedFeatures()1438*b1cdbd2cSJim Jagielski void OApplicationController::describeSupportedFeatures()
1439*b1cdbd2cSJim Jagielski {
1440*b1cdbd2cSJim Jagielski OApplicationController_CBASE::describeSupportedFeatures();
1441*b1cdbd2cSJim Jagielski
1442*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:Save", ID_BROWSER_SAVEDOC, CommandGroup::DOCUMENT );
1443*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:SaveAs", ID_BROWSER_SAVEASDOC, CommandGroup::DOCUMENT );
1444*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:SendMail", SID_MAIL_SENDDOC, CommandGroup::DOCUMENT );
1445*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBSendReportAsMail",SID_DB_APP_SENDREPORTASMAIL,
1446*b1cdbd2cSJim Jagielski CommandGroup::DOCUMENT );
1447*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBSendReportToWriter",SID_DB_APP_SENDREPORTTOWRITER,
1448*b1cdbd2cSJim Jagielski CommandGroup::DOCUMENT );
1449*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewForm", SID_APP_NEW_FORM, CommandGroup::INSERT );
1450*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewFolder", SID_APP_NEW_FOLDER, CommandGroup::INSERT );
1451*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewFormAutoPilot", SID_DB_FORM_NEW_PILOT, CommandGroup::INSERT );
1452*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewFormAutoPilotWithPreSelection",
1453*b1cdbd2cSJim Jagielski SID_FORM_CREATE_REPWIZ_PRE_SEL,
1454*b1cdbd2cSJim Jagielski CommandGroup::APPLICATION );
1455*b1cdbd2cSJim Jagielski
1456*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewReport", SID_APP_NEW_REPORT, CommandGroup::INSERT );
1457*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewReportAutoPilot",
1458*b1cdbd2cSJim Jagielski ID_DOCUMENT_CREATE_REPWIZ, CommandGroup::INSERT );
1459*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewReportAutoPilotWithPreSelection",
1460*b1cdbd2cSJim Jagielski SID_REPORT_CREATE_REPWIZ_PRE_SEL,
1461*b1cdbd2cSJim Jagielski CommandGroup::APPLICATION );
1462*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewQuery", ID_NEW_QUERY_DESIGN, CommandGroup::INSERT );
1463*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewQuerySql", ID_NEW_QUERY_SQL, CommandGroup::INSERT );
1464*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewQueryAutoPilot",ID_APP_NEW_QUERY_AUTO_PILOT,
1465*b1cdbd2cSJim Jagielski CommandGroup::INSERT );
1466*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewTable", ID_NEW_TABLE_DESIGN, CommandGroup::INSERT );
1467*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewTableAutoPilot",ID_NEW_TABLE_DESIGN_AUTO_PILOT,
1468*b1cdbd2cSJim Jagielski CommandGroup::INSERT );
1469*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewView", ID_NEW_VIEW_DESIGN, CommandGroup::INSERT );
1470*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewViewSQL", SID_DB_NEW_VIEW_SQL, CommandGroup::INSERT );
1471*b1cdbd2cSJim Jagielski
1472*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDelete", SID_DB_APP_DELETE, CommandGroup::EDIT );
1473*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:Delete", SID_DB_APP_DELETE, CommandGroup::EDIT );
1474*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBRename", SID_DB_APP_RENAME, CommandGroup::EDIT );
1475*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBEdit", SID_DB_APP_EDIT, CommandGroup::EDIT );
1476*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBEditSqlView", SID_DB_APP_EDIT_SQL_VIEW, CommandGroup::EDIT );
1477*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBOpen", SID_DB_APP_OPEN, CommandGroup::EDIT );
1478*b1cdbd2cSJim Jagielski
1479*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBTableDelete", SID_DB_APP_TABLE_DELETE, CommandGroup::EDIT );
1480*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBTableRename", SID_DB_APP_TABLE_RENAME, CommandGroup::EDIT );
1481*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBTableEdit", SID_DB_APP_TABLE_EDIT, CommandGroup::EDIT );
1482*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBTableOpen", SID_DB_APP_TABLE_OPEN, CommandGroup::EDIT );
1483*b1cdbd2cSJim Jagielski
1484*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBQueryDelete", SID_DB_APP_QUERY_DELETE, CommandGroup::EDIT );
1485*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBQueryRename", SID_DB_APP_QUERY_RENAME, CommandGroup::EDIT );
1486*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBQueryEdit", SID_DB_APP_QUERY_EDIT, CommandGroup::EDIT );
1487*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBQueryOpen", SID_DB_APP_QUERY_OPEN, CommandGroup::EDIT );
1488*b1cdbd2cSJim Jagielski
1489*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBFormDelete", SID_DB_APP_FORM_DELETE, CommandGroup::EDIT );
1490*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBFormRename", SID_DB_APP_FORM_RENAME, CommandGroup::EDIT );
1491*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBFormEdit", SID_DB_APP_FORM_EDIT, CommandGroup::EDIT );
1492*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBFormOpen", SID_DB_APP_FORM_OPEN, CommandGroup::EDIT );
1493*b1cdbd2cSJim Jagielski
1494*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBReportDelete", SID_DB_APP_REPORT_DELETE, CommandGroup::EDIT );
1495*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBReportRename", SID_DB_APP_REPORT_RENAME, CommandGroup::EDIT );
1496*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBReportEdit", SID_DB_APP_REPORT_EDIT, CommandGroup::EDIT );
1497*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBReportOpen", SID_DB_APP_REPORT_OPEN, CommandGroup::EDIT );
1498*b1cdbd2cSJim Jagielski
1499*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:SelectAll", SID_SELECTALL, CommandGroup::EDIT );
1500*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:Undo", ID_BROWSER_UNDO, CommandGroup::EDIT );
1501*b1cdbd2cSJim Jagielski
1502*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:Sortup", ID_BROWSER_SORTUP, CommandGroup::VIEW );
1503*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:SortDown", ID_BROWSER_SORTDOWN, CommandGroup::VIEW );
1504*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBRelationDesign", SID_DB_APP_DSRELDESIGN, CommandGroup::APPLICATION );
1505*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBUserAdmin", SID_DB_APP_DSUSERADMIN, CommandGroup::APPLICATION );
1506*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBTableFilter", SID_DB_APP_TABLEFILTER, CommandGroup::APPLICATION );
1507*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDSProperties", SID_DB_APP_DSPROPS, CommandGroup::EDIT );
1508*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDSConnectionType", SID_DB_APP_DSCONNECTION_TYPE,
1509*b1cdbd2cSJim Jagielski CommandGroup::EDIT );
1510*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDSAdvancedSettings",
1511*b1cdbd2cSJim Jagielski SID_DB_APP_DSADVANCED_SETTINGS,
1512*b1cdbd2cSJim Jagielski CommandGroup::EDIT );
1513*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:PasteSpecial", SID_DB_APP_PASTE_SPECIAL, CommandGroup::EDIT );
1514*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBConvertToView", SID_DB_APP_CONVERTTOVIEW, CommandGroup::EDIT );
1515*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBRefreshTables", SID_DB_APP_REFRESH_TABLES, CommandGroup::APPLICATION );
1516*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDirectSQL", ID_DIRECT_SQL, CommandGroup::APPLICATION );
1517*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBMigrateScripts", ID_MIGRATE_SCRIPTS, CommandGroup::APPLICATION );
1518*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBViewTables", SID_DB_APP_VIEW_TABLES, CommandGroup::VIEW );
1519*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBViewQueries", SID_DB_APP_VIEW_QUERIES, CommandGroup::VIEW );
1520*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBViewForms", SID_DB_APP_VIEW_FORMS, CommandGroup::VIEW );
1521*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBViewReports", SID_DB_APP_VIEW_REPORTS, CommandGroup::VIEW );
1522*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDisablePreview", SID_DB_APP_DISABLE_PREVIEW,CommandGroup::VIEW );
1523*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBShowDocInfoPreview",
1524*b1cdbd2cSJim Jagielski SID_DB_APP_VIEW_DOCINFO_PREVIEW,
1525*b1cdbd2cSJim Jagielski CommandGroup::VIEW );
1526*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBShowDocPreview", SID_DB_APP_VIEW_DOC_PREVIEW,
1527*b1cdbd2cSJim Jagielski CommandGroup::VIEW );
1528*b1cdbd2cSJim Jagielski
1529*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:OpenUrl", SID_OPENURL, CommandGroup::APPLICATION );
1530*b1cdbd2cSJim Jagielski
1531*b1cdbd2cSJim Jagielski // this one should not appear under Tools->Customize->Keyboard
1532*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBNewReportWithPreSelection",
1533*b1cdbd2cSJim Jagielski SID_APP_NEW_REPORT_PRE_SEL,CommandGroup::INTERNAL );
1534*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDSImport", SID_DB_APP_DSIMPORT, CommandGroup::INTERNAL);
1535*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDSExport", SID_DB_APP_DSEXPORT, CommandGroup::INTERNAL);
1536*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBDBAdmin", SID_DB_APP_DBADMIN, CommandGroup::INTERNAL);
1537*b1cdbd2cSJim Jagielski
1538*b1cdbd2cSJim Jagielski // status info
1539*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBStatusType", SID_DB_APP_STATUS_TYPE, CommandGroup::INTERNAL);
1540*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBStatusDBName", SID_DB_APP_STATUS_DBNAME, CommandGroup::INTERNAL);
1541*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBStatusUserName", SID_DB_APP_STATUS_USERNAME, CommandGroup::INTERNAL);
1542*b1cdbd2cSJim Jagielski implDescribeSupportedFeature( ".uno:DBStatusHostName", SID_DB_APP_STATUS_HOSTNAME, CommandGroup::INTERNAL);
1543*b1cdbd2cSJim Jagielski }
1544*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getContainer() const1545*b1cdbd2cSJim Jagielski OApplicationView* OApplicationController::getContainer() const
1546*b1cdbd2cSJim Jagielski {
1547*b1cdbd2cSJim Jagielski return static_cast< OApplicationView* >( getView() );
1548*b1cdbd2cSJim Jagielski }
1549*b1cdbd2cSJim Jagielski
1550*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
1551*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XContainerListener
elementInserted(const ContainerEvent & _rEvent)1552*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::elementInserted( const ContainerEvent& _rEvent ) throw(RuntimeException)
1553*b1cdbd2cSJim Jagielski {
1554*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
1555*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
1556*b1cdbd2cSJim Jagielski
1557*b1cdbd2cSJim Jagielski Reference< XContainer > xContainer(_rEvent.Source, UNO_QUERY);
1558*b1cdbd2cSJim Jagielski if ( ::std::find(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),xContainer) != m_aCurrentContainers.end() )
1559*b1cdbd2cSJim Jagielski {
1560*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
1561*b1cdbd2cSJim Jagielski if ( getContainer() )
1562*b1cdbd2cSJim Jagielski {
1563*b1cdbd2cSJim Jagielski ::rtl::OUString sName;
1564*b1cdbd2cSJim Jagielski _rEvent.Accessor >>= sName;
1565*b1cdbd2cSJim Jagielski ElementType eType = getElementType(xContainer);
1566*b1cdbd2cSJim Jagielski
1567*b1cdbd2cSJim Jagielski switch( eType )
1568*b1cdbd2cSJim Jagielski {
1569*b1cdbd2cSJim Jagielski case E_TABLE:
1570*b1cdbd2cSJim Jagielski ensureConnection();
1571*b1cdbd2cSJim Jagielski break;
1572*b1cdbd2cSJim Jagielski case E_FORM:
1573*b1cdbd2cSJim Jagielski case E_REPORT:
1574*b1cdbd2cSJim Jagielski {
1575*b1cdbd2cSJim Jagielski Reference< XContainer > xSubContainer(_rEvent.Element,UNO_QUERY);
1576*b1cdbd2cSJim Jagielski if ( xSubContainer.is() )
1577*b1cdbd2cSJim Jagielski containerFound(xSubContainer);
1578*b1cdbd2cSJim Jagielski }
1579*b1cdbd2cSJim Jagielski break;
1580*b1cdbd2cSJim Jagielski default:
1581*b1cdbd2cSJim Jagielski break;
1582*b1cdbd2cSJim Jagielski }
1583*b1cdbd2cSJim Jagielski getContainer()->elementAdded(eType,sName,_rEvent.Element);
1584*b1cdbd2cSJim Jagielski }
1585*b1cdbd2cSJim Jagielski }
1586*b1cdbd2cSJim Jagielski }
1587*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
elementRemoved(const ContainerEvent & _rEvent)1588*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::elementRemoved( const ContainerEvent& _rEvent ) throw(RuntimeException)
1589*b1cdbd2cSJim Jagielski {
1590*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
1591*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
1592*b1cdbd2cSJim Jagielski
1593*b1cdbd2cSJim Jagielski Reference< XContainer > xContainer(_rEvent.Source, UNO_QUERY);
1594*b1cdbd2cSJim Jagielski if ( ::std::find(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),xContainer) != m_aCurrentContainers.end() )
1595*b1cdbd2cSJim Jagielski {
1596*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
1597*b1cdbd2cSJim Jagielski ::rtl::OUString sName;
1598*b1cdbd2cSJim Jagielski _rEvent.Accessor >>= sName;
1599*b1cdbd2cSJim Jagielski ElementType eType = getElementType(xContainer);
1600*b1cdbd2cSJim Jagielski switch( eType )
1601*b1cdbd2cSJim Jagielski {
1602*b1cdbd2cSJim Jagielski case E_TABLE:
1603*b1cdbd2cSJim Jagielski ensureConnection();
1604*b1cdbd2cSJim Jagielski break;
1605*b1cdbd2cSJim Jagielski case E_FORM:
1606*b1cdbd2cSJim Jagielski case E_REPORT:
1607*b1cdbd2cSJim Jagielski {
1608*b1cdbd2cSJim Jagielski Reference<XContent> xContent(xContainer,UNO_QUERY);
1609*b1cdbd2cSJim Jagielski if ( xContent.is() )
1610*b1cdbd2cSJim Jagielski {
1611*b1cdbd2cSJim Jagielski sName = xContent->getIdentifier()->getContentIdentifier() + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + sName;
1612*b1cdbd2cSJim Jagielski }
1613*b1cdbd2cSJim Jagielski }
1614*b1cdbd2cSJim Jagielski break;
1615*b1cdbd2cSJim Jagielski default:
1616*b1cdbd2cSJim Jagielski break;
1617*b1cdbd2cSJim Jagielski }
1618*b1cdbd2cSJim Jagielski getContainer()->elementRemoved(eType,sName);
1619*b1cdbd2cSJim Jagielski }
1620*b1cdbd2cSJim Jagielski }
1621*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
elementReplaced(const ContainerEvent & _rEvent)1622*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::elementReplaced( const ContainerEvent& _rEvent ) throw(RuntimeException)
1623*b1cdbd2cSJim Jagielski {
1624*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
1625*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
1626*b1cdbd2cSJim Jagielski
1627*b1cdbd2cSJim Jagielski Reference< XContainer > xContainer(_rEvent.Source, UNO_QUERY);
1628*b1cdbd2cSJim Jagielski if ( ::std::find(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),xContainer) != m_aCurrentContainers.end() )
1629*b1cdbd2cSJim Jagielski {
1630*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
1631*b1cdbd2cSJim Jagielski ::rtl::OUString sName;
1632*b1cdbd2cSJim Jagielski try
1633*b1cdbd2cSJim Jagielski {
1634*b1cdbd2cSJim Jagielski _rEvent.Accessor >>= sName;
1635*b1cdbd2cSJim Jagielski Reference<XConnection> xConnection;
1636*b1cdbd2cSJim Jagielski Reference<XPropertySet> xProp(_rEvent.Element,UNO_QUERY);
1637*b1cdbd2cSJim Jagielski ::rtl::OUString sNewName;
1638*b1cdbd2cSJim Jagielski
1639*b1cdbd2cSJim Jagielski ElementType eType = getElementType(xContainer);
1640*b1cdbd2cSJim Jagielski switch( eType )
1641*b1cdbd2cSJim Jagielski {
1642*b1cdbd2cSJim Jagielski case E_TABLE:
1643*b1cdbd2cSJim Jagielski {
1644*b1cdbd2cSJim Jagielski ensureConnection();
1645*b1cdbd2cSJim Jagielski if ( xProp.is() && m_xMetaData.is() )
1646*b1cdbd2cSJim Jagielski sNewName = ::dbaui::composeTableName( m_xMetaData, xProp, ::dbtools::eInDataManipulation, false, false, false );
1647*b1cdbd2cSJim Jagielski }
1648*b1cdbd2cSJim Jagielski break;
1649*b1cdbd2cSJim Jagielski case E_FORM:
1650*b1cdbd2cSJim Jagielski case E_REPORT:
1651*b1cdbd2cSJim Jagielski {
1652*b1cdbd2cSJim Jagielski Reference<XContent> xContent(xContainer,UNO_QUERY);
1653*b1cdbd2cSJim Jagielski if ( xContent.is() )
1654*b1cdbd2cSJim Jagielski {
1655*b1cdbd2cSJim Jagielski sName = xContent->getIdentifier()->getContentIdentifier() + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + sName;
1656*b1cdbd2cSJim Jagielski }
1657*b1cdbd2cSJim Jagielski }
1658*b1cdbd2cSJim Jagielski break;
1659*b1cdbd2cSJim Jagielski default:
1660*b1cdbd2cSJim Jagielski break;
1661*b1cdbd2cSJim Jagielski }
1662*b1cdbd2cSJim Jagielski // getContainer()->elementReplaced(getContainer()->getElementType(),sName,sNewName);
1663*b1cdbd2cSJim Jagielski }
1664*b1cdbd2cSJim Jagielski catch( Exception& )
1665*b1cdbd2cSJim Jagielski {
1666*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
1667*b1cdbd2cSJim Jagielski }
1668*b1cdbd2cSJim Jagielski }
1669*b1cdbd2cSJim Jagielski }
1670*b1cdbd2cSJim Jagielski namespace
1671*b1cdbd2cSJim Jagielski {
lcl_getToolBarResource(ElementType _eType)1672*b1cdbd2cSJim Jagielski ::rtl::OUString lcl_getToolBarResource(ElementType _eType)
1673*b1cdbd2cSJim Jagielski {
1674*b1cdbd2cSJim Jagielski ::rtl::OUString sToolbar;
1675*b1cdbd2cSJim Jagielski switch(_eType)
1676*b1cdbd2cSJim Jagielski {
1677*b1cdbd2cSJim Jagielski case E_TABLE:
1678*b1cdbd2cSJim Jagielski sToolbar = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/tableobjectbar" ));
1679*b1cdbd2cSJim Jagielski break;
1680*b1cdbd2cSJim Jagielski case E_QUERY:
1681*b1cdbd2cSJim Jagielski sToolbar = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/queryobjectbar" ));
1682*b1cdbd2cSJim Jagielski break;
1683*b1cdbd2cSJim Jagielski case E_FORM:
1684*b1cdbd2cSJim Jagielski sToolbar = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/formobjectbar" ));
1685*b1cdbd2cSJim Jagielski break;
1686*b1cdbd2cSJim Jagielski case E_REPORT:
1687*b1cdbd2cSJim Jagielski sToolbar = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/reportobjectbar" ));
1688*b1cdbd2cSJim Jagielski break;
1689*b1cdbd2cSJim Jagielski case E_NONE:
1690*b1cdbd2cSJim Jagielski break;
1691*b1cdbd2cSJim Jagielski default:
1692*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"Invalid ElementType!");
1693*b1cdbd2cSJim Jagielski break;
1694*b1cdbd2cSJim Jagielski }
1695*b1cdbd2cSJim Jagielski return sToolbar;
1696*b1cdbd2cSJim Jagielski }
1697*b1cdbd2cSJim Jagielski }
1698*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onContainerSelect(ElementType _eType)1699*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::onContainerSelect(ElementType _eType)
1700*b1cdbd2cSJim Jagielski {
1701*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
1702*b1cdbd2cSJim Jagielski
1703*b1cdbd2cSJim Jagielski if ( m_eCurrentType != _eType && _eType != E_NONE )
1704*b1cdbd2cSJim Jagielski {
1705*b1cdbd2cSJim Jagielski SelectionGuard aSelGuard( *m_pSelectionNotifier );
1706*b1cdbd2cSJim Jagielski
1707*b1cdbd2cSJim Jagielski if ( _eType == E_TABLE )
1708*b1cdbd2cSJim Jagielski {
1709*b1cdbd2cSJim Jagielski try
1710*b1cdbd2cSJim Jagielski {
1711*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1712*b1cdbd2cSJim Jagielski if ( xConnection.is() && getContainer()->getDetailView() )
1713*b1cdbd2cSJim Jagielski {
1714*b1cdbd2cSJim Jagielski getContainer()->getDetailView()->createTablesPage(xConnection);
1715*b1cdbd2cSJim Jagielski Reference<XTablesSupplier> xTabSup(xConnection,UNO_QUERY);
1716*b1cdbd2cSJim Jagielski if ( xTabSup.is() )
1717*b1cdbd2cSJim Jagielski addContainerListener(xTabSup->getTables());
1718*b1cdbd2cSJim Jagielski }
1719*b1cdbd2cSJim Jagielski else
1720*b1cdbd2cSJim Jagielski {
1721*b1cdbd2cSJim Jagielski return sal_False;
1722*b1cdbd2cSJim Jagielski }
1723*b1cdbd2cSJim Jagielski }
1724*b1cdbd2cSJim Jagielski catch( const Exception& )
1725*b1cdbd2cSJim Jagielski {
1726*b1cdbd2cSJim Jagielski return sal_False;
1727*b1cdbd2cSJim Jagielski }
1728*b1cdbd2cSJim Jagielski }
1729*b1cdbd2cSJim Jagielski Reference< XLayoutManager > xLayoutManager = getLayoutManager( getFrame() );
1730*b1cdbd2cSJim Jagielski if ( xLayoutManager.is() )
1731*b1cdbd2cSJim Jagielski {
1732*b1cdbd2cSJim Jagielski ::rtl::OUString sToolbar = lcl_getToolBarResource(_eType);
1733*b1cdbd2cSJim Jagielski ::rtl::OUString sDestroyToolbar = lcl_getToolBarResource(m_eCurrentType);
1734*b1cdbd2cSJim Jagielski
1735*b1cdbd2cSJim Jagielski xLayoutManager->lock();
1736*b1cdbd2cSJim Jagielski xLayoutManager->destroyElement( sDestroyToolbar );
1737*b1cdbd2cSJim Jagielski if ( sToolbar.getLength() )
1738*b1cdbd2cSJim Jagielski {
1739*b1cdbd2cSJim Jagielski xLayoutManager->createElement( sToolbar );
1740*b1cdbd2cSJim Jagielski xLayoutManager->requestElement( sToolbar );
1741*b1cdbd2cSJim Jagielski }
1742*b1cdbd2cSJim Jagielski xLayoutManager->unlock();
1743*b1cdbd2cSJim Jagielski xLayoutManager->doLayout();
1744*b1cdbd2cSJim Jagielski }
1745*b1cdbd2cSJim Jagielski
1746*b1cdbd2cSJim Jagielski if ( _eType != E_TABLE && getContainer()->getDetailView() )
1747*b1cdbd2cSJim Jagielski {
1748*b1cdbd2cSJim Jagielski Reference< XNameAccess > xContainer = getElements(_eType);
1749*b1cdbd2cSJim Jagielski addContainerListener(xContainer);
1750*b1cdbd2cSJim Jagielski getContainer()->getDetailView()->createPage(_eType,xContainer);
1751*b1cdbd2cSJim Jagielski }
1752*b1cdbd2cSJim Jagielski
1753*b1cdbd2cSJim Jagielski SelectionByElementType::iterator pendingSelection = m_aPendingSelection.find( _eType );
1754*b1cdbd2cSJim Jagielski if ( pendingSelection != m_aPendingSelection.end() )
1755*b1cdbd2cSJim Jagielski {
1756*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aSelected( pendingSelection->second.size() );
1757*b1cdbd2cSJim Jagielski ::std::copy( pendingSelection->second.begin(), pendingSelection->second.end(), aSelected.getArray() );
1758*b1cdbd2cSJim Jagielski getContainer()->selectElements( aSelected );
1759*b1cdbd2cSJim Jagielski
1760*b1cdbd2cSJim Jagielski m_aPendingSelection.erase( pendingSelection );
1761*b1cdbd2cSJim Jagielski }
1762*b1cdbd2cSJim Jagielski
1763*b1cdbd2cSJim Jagielski InvalidateAll();
1764*b1cdbd2cSJim Jagielski }
1765*b1cdbd2cSJim Jagielski m_eCurrentType = _eType;
1766*b1cdbd2cSJim Jagielski
1767*b1cdbd2cSJim Jagielski return sal_True;
1768*b1cdbd2cSJim Jagielski }
1769*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onEntryDoubleClick(SvTreeListBox & _rTree)1770*b1cdbd2cSJim Jagielski bool OApplicationController::onEntryDoubleClick( SvTreeListBox& _rTree )
1771*b1cdbd2cSJim Jagielski {
1772*b1cdbd2cSJim Jagielski if ( getContainer() && getContainer()->isLeaf( _rTree.GetHdlEntry() ) )
1773*b1cdbd2cSJim Jagielski {
1774*b1cdbd2cSJim Jagielski try
1775*b1cdbd2cSJim Jagielski {
1776*b1cdbd2cSJim Jagielski openElement(
1777*b1cdbd2cSJim Jagielski getContainer()->getQualifiedName( _rTree.GetHdlEntry() ),
1778*b1cdbd2cSJim Jagielski getContainer()->getElementType(),
1779*b1cdbd2cSJim Jagielski E_OPEN_NORMAL
1780*b1cdbd2cSJim Jagielski );
1781*b1cdbd2cSJim Jagielski return true; // handled
1782*b1cdbd2cSJim Jagielski }
1783*b1cdbd2cSJim Jagielski catch(const Exception&)
1784*b1cdbd2cSJim Jagielski {
1785*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
1786*b1cdbd2cSJim Jagielski }
1787*b1cdbd2cSJim Jagielski }
1788*b1cdbd2cSJim Jagielski return false; // not handled
1789*b1cdbd2cSJim Jagielski }
1790*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
impl_isAlterableView_nothrow(const::rtl::OUString & _rTableOrViewName) const1791*b1cdbd2cSJim Jagielski bool OApplicationController::impl_isAlterableView_nothrow( const ::rtl::OUString& _rTableOrViewName ) const
1792*b1cdbd2cSJim Jagielski {
1793*b1cdbd2cSJim Jagielski OSL_PRECOND( m_xDataSourceConnection.is(), "OApplicationController::impl_isAlterableView_nothrow: no connection!" );
1794*b1cdbd2cSJim Jagielski
1795*b1cdbd2cSJim Jagielski bool bIsAlterableView( false );
1796*b1cdbd2cSJim Jagielski try
1797*b1cdbd2cSJim Jagielski {
1798*b1cdbd2cSJim Jagielski Reference< XViewsSupplier > xViewsSupp( m_xDataSourceConnection, UNO_QUERY );
1799*b1cdbd2cSJim Jagielski Reference< XNameAccess > xViews;
1800*b1cdbd2cSJim Jagielski if ( xViewsSupp.is() )
1801*b1cdbd2cSJim Jagielski xViews = xViewsSupp->getViews();
1802*b1cdbd2cSJim Jagielski
1803*b1cdbd2cSJim Jagielski Reference< XAlterView > xAsAlterableView;
1804*b1cdbd2cSJim Jagielski if ( xViews.is() && xViews->hasByName( _rTableOrViewName ) )
1805*b1cdbd2cSJim Jagielski xAsAlterableView.set( xViews->getByName( _rTableOrViewName ), UNO_QUERY );
1806*b1cdbd2cSJim Jagielski
1807*b1cdbd2cSJim Jagielski bIsAlterableView = xAsAlterableView.is();
1808*b1cdbd2cSJim Jagielski }
1809*b1cdbd2cSJim Jagielski catch( const Exception& )
1810*b1cdbd2cSJim Jagielski {
1811*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
1812*b1cdbd2cSJim Jagielski }
1813*b1cdbd2cSJim Jagielski return bIsAlterableView;
1814*b1cdbd2cSJim Jagielski }
1815*b1cdbd2cSJim Jagielski
1816*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
openElement(const::rtl::OUString & _sName,ElementType _eType,ElementOpenMode _eOpenMode,sal_uInt16 _nInstigatorCommand)1817*b1cdbd2cSJim Jagielski Reference< XComponent > OApplicationController::openElement(const ::rtl::OUString& _sName, ElementType _eType,
1818*b1cdbd2cSJim Jagielski ElementOpenMode _eOpenMode, sal_uInt16 _nInstigatorCommand )
1819*b1cdbd2cSJim Jagielski {
1820*b1cdbd2cSJim Jagielski return openElementWithArguments( _sName, _eType, _eOpenMode, _nInstigatorCommand, ::comphelper::NamedValueCollection() );
1821*b1cdbd2cSJim Jagielski }
1822*b1cdbd2cSJim Jagielski
1823*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
openElementWithArguments(const::rtl::OUString & _sName,ElementType _eType,ElementOpenMode _eOpenMode,sal_uInt16 _nInstigatorCommand,const::comphelper::NamedValueCollection & _rAdditionalArguments)1824*b1cdbd2cSJim Jagielski Reference< XComponent > OApplicationController::openElementWithArguments( const ::rtl::OUString& _sName, ElementType _eType,
1825*b1cdbd2cSJim Jagielski ElementOpenMode _eOpenMode, sal_uInt16 _nInstigatorCommand, const ::comphelper::NamedValueCollection& _rAdditionalArguments )
1826*b1cdbd2cSJim Jagielski {
1827*b1cdbd2cSJim Jagielski OSL_PRECOND( getContainer(), "OApplicationController::openElementWithArguments: no view!" );
1828*b1cdbd2cSJim Jagielski if ( !getContainer() )
1829*b1cdbd2cSJim Jagielski return NULL;
1830*b1cdbd2cSJim Jagielski
1831*b1cdbd2cSJim Jagielski Reference< XComponent > xRet;
1832*b1cdbd2cSJim Jagielski if ( _eOpenMode == E_OPEN_DESIGN )
1833*b1cdbd2cSJim Jagielski {
1834*b1cdbd2cSJim Jagielski // OJ: http://www.openoffice.org/issues/show_bug.cgi?id=30382
1835*b1cdbd2cSJim Jagielski getContainer()->showPreview(NULL);
1836*b1cdbd2cSJim Jagielski }
1837*b1cdbd2cSJim Jagielski
1838*b1cdbd2cSJim Jagielski bool isStandaloneDocument = false;
1839*b1cdbd2cSJim Jagielski switch ( _eType )
1840*b1cdbd2cSJim Jagielski {
1841*b1cdbd2cSJim Jagielski case E_REPORT:
1842*b1cdbd2cSJim Jagielski if ( _eOpenMode != E_OPEN_DESIGN )
1843*b1cdbd2cSJim Jagielski {
1844*b1cdbd2cSJim Jagielski // reports which are opened in a mode other than design are no sub components of our application
1845*b1cdbd2cSJim Jagielski // component, but standalone documents.
1846*b1cdbd2cSJim Jagielski isStandaloneDocument = true;
1847*b1cdbd2cSJim Jagielski }
1848*b1cdbd2cSJim Jagielski // NO break!
1849*b1cdbd2cSJim Jagielski case E_FORM:
1850*b1cdbd2cSJim Jagielski {
1851*b1cdbd2cSJim Jagielski if ( isStandaloneDocument || !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode, xRet ) )
1852*b1cdbd2cSJim Jagielski {
1853*b1cdbd2cSJim Jagielski ::std::auto_ptr< OLinkedDocumentsAccess > aHelper = getDocumentsAccess( _eType );
1854*b1cdbd2cSJim Jagielski if ( !aHelper->isConnected() )
1855*b1cdbd2cSJim Jagielski break;
1856*b1cdbd2cSJim Jagielski
1857*b1cdbd2cSJim Jagielski Reference< XComponent > xDefinition;
1858*b1cdbd2cSJim Jagielski xRet = aHelper->open( _sName, xDefinition, _eOpenMode, _rAdditionalArguments );
1859*b1cdbd2cSJim Jagielski
1860*b1cdbd2cSJim Jagielski if ( !isStandaloneDocument )
1861*b1cdbd2cSJim Jagielski onDocumentOpened( _sName, _eType, _eOpenMode, xRet, xDefinition );
1862*b1cdbd2cSJim Jagielski }
1863*b1cdbd2cSJim Jagielski }
1864*b1cdbd2cSJim Jagielski break;
1865*b1cdbd2cSJim Jagielski
1866*b1cdbd2cSJim Jagielski case E_QUERY:
1867*b1cdbd2cSJim Jagielski case E_TABLE:
1868*b1cdbd2cSJim Jagielski {
1869*b1cdbd2cSJim Jagielski if ( !m_pSubComponentManager->activateSubFrame( _sName, _eType, _eOpenMode, xRet ) )
1870*b1cdbd2cSJim Jagielski {
1871*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
1872*b1cdbd2cSJim Jagielski if ( !xConnection.is() )
1873*b1cdbd2cSJim Jagielski break;
1874*b1cdbd2cSJim Jagielski
1875*b1cdbd2cSJim Jagielski ::std::auto_ptr< DatabaseObjectView > pDesigner;
1876*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aArguments( _rAdditionalArguments );
1877*b1cdbd2cSJim Jagielski
1878*b1cdbd2cSJim Jagielski Any aDataSource;
1879*b1cdbd2cSJim Jagielski if ( _eOpenMode == E_OPEN_DESIGN )
1880*b1cdbd2cSJim Jagielski {
1881*b1cdbd2cSJim Jagielski bool bAddViewTypeArg = false;
1882*b1cdbd2cSJim Jagielski
1883*b1cdbd2cSJim Jagielski if ( _eType == E_TABLE )
1884*b1cdbd2cSJim Jagielski {
1885*b1cdbd2cSJim Jagielski if ( impl_isAlterableView_nothrow( _sName ) )
1886*b1cdbd2cSJim Jagielski {
1887*b1cdbd2cSJim Jagielski pDesigner.reset( new QueryDesigner( getORB(), this, m_aCurrentFrame.getFrame(), true ) );
1888*b1cdbd2cSJim Jagielski bAddViewTypeArg = true;
1889*b1cdbd2cSJim Jagielski }
1890*b1cdbd2cSJim Jagielski else
1891*b1cdbd2cSJim Jagielski {
1892*b1cdbd2cSJim Jagielski pDesigner.reset( new TableDesigner( getORB(), this, m_aCurrentFrame.getFrame() ) );
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski }
1895*b1cdbd2cSJim Jagielski else if ( _eType == E_QUERY )
1896*b1cdbd2cSJim Jagielski {
1897*b1cdbd2cSJim Jagielski pDesigner.reset( new QueryDesigner( getORB(), this, m_aCurrentFrame.getFrame(), false ) );
1898*b1cdbd2cSJim Jagielski bAddViewTypeArg = true;
1899*b1cdbd2cSJim Jagielski }
1900*b1cdbd2cSJim Jagielski aDataSource <<= m_xDataSource;
1901*b1cdbd2cSJim Jagielski
1902*b1cdbd2cSJim Jagielski if ( bAddViewTypeArg )
1903*b1cdbd2cSJim Jagielski {
1904*b1cdbd2cSJim Jagielski const bool bQueryGraphicalMode =( _nInstigatorCommand != SID_DB_APP_EDIT_SQL_VIEW );
1905*b1cdbd2cSJim Jagielski aArguments.put( (::rtl::OUString)PROPERTY_GRAPHICAL_DESIGN, bQueryGraphicalMode );
1906*b1cdbd2cSJim Jagielski }
1907*b1cdbd2cSJim Jagielski
1908*b1cdbd2cSJim Jagielski }
1909*b1cdbd2cSJim Jagielski else
1910*b1cdbd2cSJim Jagielski {
1911*b1cdbd2cSJim Jagielski pDesigner.reset( new ResultSetBrowser( getORB(), this, m_aCurrentFrame.getFrame(), _eType == E_TABLE ) );
1912*b1cdbd2cSJim Jagielski
1913*b1cdbd2cSJim Jagielski if ( !aArguments.has( (::rtl::OUString)PROPERTY_SHOWMENU ) )
1914*b1cdbd2cSJim Jagielski aArguments.put( (::rtl::OUString)PROPERTY_SHOWMENU, makeAny( (sal_Bool)sal_True ) );
1915*b1cdbd2cSJim Jagielski
1916*b1cdbd2cSJim Jagielski aDataSource <<= getDatabaseName();
1917*b1cdbd2cSJim Jagielski }
1918*b1cdbd2cSJim Jagielski
1919*b1cdbd2cSJim Jagielski xRet.set( pDesigner->openExisting( aDataSource, _sName, aArguments ) );
1920*b1cdbd2cSJim Jagielski onDocumentOpened( _sName, _eType, _eOpenMode, xRet, NULL );
1921*b1cdbd2cSJim Jagielski }
1922*b1cdbd2cSJim Jagielski }
1923*b1cdbd2cSJim Jagielski break;
1924*b1cdbd2cSJim Jagielski
1925*b1cdbd2cSJim Jagielski default:
1926*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::openElement: illegal object type!" );
1927*b1cdbd2cSJim Jagielski break;
1928*b1cdbd2cSJim Jagielski }
1929*b1cdbd2cSJim Jagielski return xRet;
1930*b1cdbd2cSJim Jagielski }
1931*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
IMPL_LINK(OApplicationController,OnSelectContainer,void *,_pType)1932*b1cdbd2cSJim Jagielski IMPL_LINK( OApplicationController, OnSelectContainer, void*, _pType )
1933*b1cdbd2cSJim Jagielski {
1934*b1cdbd2cSJim Jagielski ElementType eType = (ElementType)reinterpret_cast< sal_IntPtr >( _pType );
1935*b1cdbd2cSJim Jagielski getContainer()->selectContainer(eType);
1936*b1cdbd2cSJim Jagielski return 0L;
1937*b1cdbd2cSJim Jagielski }
1938*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
IMPL_LINK(OApplicationController,OnCreateWithPilot,void *,_pType)1939*b1cdbd2cSJim Jagielski IMPL_LINK( OApplicationController, OnCreateWithPilot, void*, _pType )
1940*b1cdbd2cSJim Jagielski {
1941*b1cdbd2cSJim Jagielski ElementType eType = (ElementType)reinterpret_cast< sal_IntPtr >( _pType );
1942*b1cdbd2cSJim Jagielski newElementWithPilot( eType );
1943*b1cdbd2cSJim Jagielski return 0L;
1944*b1cdbd2cSJim Jagielski }
1945*b1cdbd2cSJim Jagielski
1946*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
newElementWithPilot(ElementType _eType)1947*b1cdbd2cSJim Jagielski void OApplicationController::newElementWithPilot( ElementType _eType )
1948*b1cdbd2cSJim Jagielski {
1949*b1cdbd2cSJim Jagielski CloseVeto aKeepDoc( getFrame() );
1950*b1cdbd2cSJim Jagielski // prevent the document being closed while the wizard is open
1951*b1cdbd2cSJim Jagielski
1952*b1cdbd2cSJim Jagielski OSL_ENSURE( getContainer(), "OApplicationController::newElementWithPilot: without a view?" );
1953*b1cdbd2cSJim Jagielski
1954*b1cdbd2cSJim Jagielski switch ( _eType )
1955*b1cdbd2cSJim Jagielski {
1956*b1cdbd2cSJim Jagielski case E_REPORT:
1957*b1cdbd2cSJim Jagielski case E_FORM:
1958*b1cdbd2cSJim Jagielski {
1959*b1cdbd2cSJim Jagielski ::std::auto_ptr<OLinkedDocumentsAccess> aHelper = getDocumentsAccess(_eType);
1960*b1cdbd2cSJim Jagielski if ( aHelper->isConnected() )
1961*b1cdbd2cSJim Jagielski {
1962*b1cdbd2cSJim Jagielski sal_Int32 nCommandType = -1;
1963*b1cdbd2cSJim Jagielski const ::rtl::OUString sCurrentSelected( getCurrentlySelectedName( nCommandType ) );
1964*b1cdbd2cSJim Jagielski if ( E_REPORT == _eType )
1965*b1cdbd2cSJim Jagielski aHelper->newReportWithPilot( nCommandType, sCurrentSelected );
1966*b1cdbd2cSJim Jagielski else
1967*b1cdbd2cSJim Jagielski aHelper->newFormWithPilot( nCommandType, sCurrentSelected );
1968*b1cdbd2cSJim Jagielski }
1969*b1cdbd2cSJim Jagielski }
1970*b1cdbd2cSJim Jagielski break;
1971*b1cdbd2cSJim Jagielski case E_QUERY:
1972*b1cdbd2cSJim Jagielski case E_TABLE:
1973*b1cdbd2cSJim Jagielski {
1974*b1cdbd2cSJim Jagielski ::std::auto_ptr<OLinkedDocumentsAccess> aHelper = getDocumentsAccess(_eType);
1975*b1cdbd2cSJim Jagielski if ( aHelper->isConnected() )
1976*b1cdbd2cSJim Jagielski {
1977*b1cdbd2cSJim Jagielski if ( E_QUERY == _eType )
1978*b1cdbd2cSJim Jagielski aHelper->newQueryWithPilot();
1979*b1cdbd2cSJim Jagielski else
1980*b1cdbd2cSJim Jagielski aHelper->newTableWithPilot();
1981*b1cdbd2cSJim Jagielski }
1982*b1cdbd2cSJim Jagielski }
1983*b1cdbd2cSJim Jagielski break;
1984*b1cdbd2cSJim Jagielski case E_NONE:
1985*b1cdbd2cSJim Jagielski break;
1986*b1cdbd2cSJim Jagielski }
1987*b1cdbd2cSJim Jagielski
1988*b1cdbd2cSJim Jagielski // no need for onDocumentOpened, the table wizard opens the created table by using
1989*b1cdbd2cSJim Jagielski // XDatabaseDocumentUI::loadComponent method.
1990*b1cdbd2cSJim Jagielski }
1991*b1cdbd2cSJim Jagielski
1992*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
newElement(ElementType _eType,const::comphelper::NamedValueCollection & i_rAdditionalArguments,Reference<XComponent> & o_rDocumentDefinition)1993*b1cdbd2cSJim Jagielski Reference< XComponent > OApplicationController::newElement( ElementType _eType, const ::comphelper::NamedValueCollection& i_rAdditionalArguments,
1994*b1cdbd2cSJim Jagielski Reference< XComponent >& o_rDocumentDefinition )
1995*b1cdbd2cSJim Jagielski {
1996*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
1997*b1cdbd2cSJim Jagielski
1998*b1cdbd2cSJim Jagielski Reference< XComponent > xComponent;
1999*b1cdbd2cSJim Jagielski o_rDocumentDefinition.clear();
2000*b1cdbd2cSJim Jagielski
2001*b1cdbd2cSJim Jagielski switch ( _eType )
2002*b1cdbd2cSJim Jagielski {
2003*b1cdbd2cSJim Jagielski case E_FORM:
2004*b1cdbd2cSJim Jagielski case E_REPORT:
2005*b1cdbd2cSJim Jagielski {
2006*b1cdbd2cSJim Jagielski ::std::auto_ptr<OLinkedDocumentsAccess> aHelper = getDocumentsAccess( _eType );
2007*b1cdbd2cSJim Jagielski if ( !aHelper->isConnected() )
2008*b1cdbd2cSJim Jagielski break;
2009*b1cdbd2cSJim Jagielski
2010*b1cdbd2cSJim Jagielski xComponent = aHelper->newDocument( _eType == E_FORM ? ID_FORM_NEW_TEXT : ID_REPORT_NEW_TEXT, i_rAdditionalArguments, o_rDocumentDefinition );
2011*b1cdbd2cSJim Jagielski }
2012*b1cdbd2cSJim Jagielski break;
2013*b1cdbd2cSJim Jagielski
2014*b1cdbd2cSJim Jagielski case E_QUERY:
2015*b1cdbd2cSJim Jagielski case E_TABLE:
2016*b1cdbd2cSJim Jagielski {
2017*b1cdbd2cSJim Jagielski ::std::auto_ptr< DatabaseObjectView > pDesigner;
2018*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
2019*b1cdbd2cSJim Jagielski if ( !xConnection.is() )
2020*b1cdbd2cSJim Jagielski break;
2021*b1cdbd2cSJim Jagielski
2022*b1cdbd2cSJim Jagielski if ( _eType == E_TABLE )
2023*b1cdbd2cSJim Jagielski {
2024*b1cdbd2cSJim Jagielski pDesigner.reset( new TableDesigner( getORB(), this, getFrame() ) );
2025*b1cdbd2cSJim Jagielski }
2026*b1cdbd2cSJim Jagielski else if ( _eType == E_QUERY )
2027*b1cdbd2cSJim Jagielski {
2028*b1cdbd2cSJim Jagielski pDesigner.reset( new QueryDesigner( getORB(), this, getFrame(), false ) );
2029*b1cdbd2cSJim Jagielski }
2030*b1cdbd2cSJim Jagielski
2031*b1cdbd2cSJim Jagielski Reference< XDataSource > xDataSource( m_xDataSource, UNO_QUERY );
2032*b1cdbd2cSJim Jagielski xComponent.set( pDesigner->createNew( xDataSource, i_rAdditionalArguments ), UNO_QUERY );
2033*b1cdbd2cSJim Jagielski }
2034*b1cdbd2cSJim Jagielski break;
2035*b1cdbd2cSJim Jagielski
2036*b1cdbd2cSJim Jagielski default:
2037*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::newElement: illegal type!" );
2038*b1cdbd2cSJim Jagielski break;
2039*b1cdbd2cSJim Jagielski }
2040*b1cdbd2cSJim Jagielski
2041*b1cdbd2cSJim Jagielski if ( xComponent.is() )
2042*b1cdbd2cSJim Jagielski onDocumentOpened( ::rtl::OUString(), _eType, E_OPEN_DESIGN, xComponent, o_rDocumentDefinition );
2043*b1cdbd2cSJim Jagielski
2044*b1cdbd2cSJim Jagielski return xComponent;
2045*b1cdbd2cSJim Jagielski }
2046*b1cdbd2cSJim Jagielski
2047*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
addContainerListener(const Reference<XNameAccess> & _xCollection)2048*b1cdbd2cSJim Jagielski void OApplicationController::addContainerListener(const Reference<XNameAccess>& _xCollection)
2049*b1cdbd2cSJim Jagielski {
2050*b1cdbd2cSJim Jagielski try
2051*b1cdbd2cSJim Jagielski {
2052*b1cdbd2cSJim Jagielski Reference< XContainer > xCont(_xCollection, UNO_QUERY);
2053*b1cdbd2cSJim Jagielski if ( xCont.is() )
2054*b1cdbd2cSJim Jagielski {
2055*b1cdbd2cSJim Jagielski // add as listener to get notified if elements are inserted or removed
2056*b1cdbd2cSJim Jagielski TContainerVector::iterator aFind = ::std::find(m_aCurrentContainers.begin(),m_aCurrentContainers.end(),xCont);
2057*b1cdbd2cSJim Jagielski if ( aFind == m_aCurrentContainers.end() )
2058*b1cdbd2cSJim Jagielski {
2059*b1cdbd2cSJim Jagielski xCont->addContainerListener(this);
2060*b1cdbd2cSJim Jagielski m_aCurrentContainers.push_back(xCont);
2061*b1cdbd2cSJim Jagielski }
2062*b1cdbd2cSJim Jagielski }
2063*b1cdbd2cSJim Jagielski }
2064*b1cdbd2cSJim Jagielski catch( const Exception& )
2065*b1cdbd2cSJim Jagielski {
2066*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2067*b1cdbd2cSJim Jagielski }
2068*b1cdbd2cSJim Jagielski }
2069*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
renameEntry()2070*b1cdbd2cSJim Jagielski void OApplicationController::renameEntry()
2071*b1cdbd2cSJim Jagielski {
2072*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
2073*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
2074*b1cdbd2cSJim Jagielski
2075*b1cdbd2cSJim Jagielski OSL_ENSURE(getContainer(),"View is NULL! -> GPF");
2076*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OUString> aList;
2077*b1cdbd2cSJim Jagielski getSelectionElementNames(aList);
2078*b1cdbd2cSJim Jagielski
2079*b1cdbd2cSJim Jagielski Reference< XNameAccess > xContainer = getElements(getContainer()->getElementType());
2080*b1cdbd2cSJim Jagielski OSL_ENSURE(aList.size() == 1,"Invalid rename call here. More than one element!");
2081*b1cdbd2cSJim Jagielski if ( aList.empty() )
2082*b1cdbd2cSJim Jagielski return;
2083*b1cdbd2cSJim Jagielski
2084*b1cdbd2cSJim Jagielski try
2085*b1cdbd2cSJim Jagielski {
2086*b1cdbd2cSJim Jagielski if ( xContainer.is() )
2087*b1cdbd2cSJim Jagielski {
2088*b1cdbd2cSJim Jagielski ::std::auto_ptr< IObjectNameCheck > pNameChecker;
2089*b1cdbd2cSJim Jagielski ::std::auto_ptr< OSaveAsDlg > aDialog;
2090*b1cdbd2cSJim Jagielski
2091*b1cdbd2cSJim Jagielski Reference<XRename> xRename;
2092*b1cdbd2cSJim Jagielski const ElementType eType = getContainer()->getElementType();
2093*b1cdbd2cSJim Jagielski switch( eType )
2094*b1cdbd2cSJim Jagielski {
2095*b1cdbd2cSJim Jagielski case E_FORM:
2096*b1cdbd2cSJim Jagielski case E_REPORT:
2097*b1cdbd2cSJim Jagielski {
2098*b1cdbd2cSJim Jagielski Reference<XHierarchicalNameContainer> xHNames(xContainer, UNO_QUERY);
2099*b1cdbd2cSJim Jagielski if ( xHNames.is() )
2100*b1cdbd2cSJim Jagielski {
2101*b1cdbd2cSJim Jagielski String sLabel;
2102*b1cdbd2cSJim Jagielski if ( eType == E_FORM )
2103*b1cdbd2cSJim Jagielski sLabel = String(ModuleRes( STR_FRM_LABEL ));
2104*b1cdbd2cSJim Jagielski else
2105*b1cdbd2cSJim Jagielski sLabel = String(ModuleRes( STR_RPT_LABEL ));
2106*b1cdbd2cSJim Jagielski
2107*b1cdbd2cSJim Jagielski ::rtl::OUString sName = *aList.begin();
2108*b1cdbd2cSJim Jagielski if ( xHNames->hasByHierarchicalName(sName) )
2109*b1cdbd2cSJim Jagielski {
2110*b1cdbd2cSJim Jagielski xRename.set(xHNames->getByHierarchicalName(sName),UNO_QUERY);
2111*b1cdbd2cSJim Jagielski Reference<XChild> xChild(xRename,UNO_QUERY);
2112*b1cdbd2cSJim Jagielski if ( xChild.is() )
2113*b1cdbd2cSJim Jagielski {
2114*b1cdbd2cSJim Jagielski Reference<XHierarchicalNameContainer> xParent(xChild->getParent(),UNO_QUERY);
2115*b1cdbd2cSJim Jagielski if ( xParent.is() )
2116*b1cdbd2cSJim Jagielski {
2117*b1cdbd2cSJim Jagielski xHNames = xParent;
2118*b1cdbd2cSJim Jagielski Reference<XPropertySet>(xRename,UNO_QUERY)->getPropertyValue(PROPERTY_NAME) >>= sName;
2119*b1cdbd2cSJim Jagielski }
2120*b1cdbd2cSJim Jagielski }
2121*b1cdbd2cSJim Jagielski pNameChecker.reset( new HierarchicalNameCheck( xHNames.get(), String() ) );
2122*b1cdbd2cSJim Jagielski aDialog.reset( new OSaveAsDlg(
2123*b1cdbd2cSJim Jagielski getView(), getORB(), sName, sLabel, *pNameChecker, SAD_TITLE_RENAME ) );
2124*b1cdbd2cSJim Jagielski }
2125*b1cdbd2cSJim Jagielski }
2126*b1cdbd2cSJim Jagielski }
2127*b1cdbd2cSJim Jagielski break;
2128*b1cdbd2cSJim Jagielski case E_TABLE:
2129*b1cdbd2cSJim Jagielski ensureConnection();
2130*b1cdbd2cSJim Jagielski if ( !getConnection().is() )
2131*b1cdbd2cSJim Jagielski break;
2132*b1cdbd2cSJim Jagielski // NO break
2133*b1cdbd2cSJim Jagielski case E_QUERY:
2134*b1cdbd2cSJim Jagielski if ( xContainer->hasByName(*aList.begin()) )
2135*b1cdbd2cSJim Jagielski {
2136*b1cdbd2cSJim Jagielski xRename.set(xContainer->getByName(*aList.begin()),UNO_QUERY);
2137*b1cdbd2cSJim Jagielski sal_Int32 nCommandType = eType == E_QUERY ? CommandType::QUERY : CommandType::TABLE;
2138*b1cdbd2cSJim Jagielski
2139*b1cdbd2cSJim Jagielski ensureConnection();
2140*b1cdbd2cSJim Jagielski pNameChecker.reset( new DynamicTableOrQueryNameCheck( getConnection(), nCommandType ) );
2141*b1cdbd2cSJim Jagielski aDialog.reset( new OSaveAsDlg(
2142*b1cdbd2cSJim Jagielski getView(), nCommandType, getORB(), getConnection(),
2143*b1cdbd2cSJim Jagielski *aList.begin(), *pNameChecker, SAD_TITLE_RENAME ) );
2144*b1cdbd2cSJim Jagielski }
2145*b1cdbd2cSJim Jagielski break;
2146*b1cdbd2cSJim Jagielski default:
2147*b1cdbd2cSJim Jagielski break;
2148*b1cdbd2cSJim Jagielski }
2149*b1cdbd2cSJim Jagielski
2150*b1cdbd2cSJim Jagielski if ( xRename.is() && aDialog.get() )
2151*b1cdbd2cSJim Jagielski {
2152*b1cdbd2cSJim Jagielski
2153*b1cdbd2cSJim Jagielski sal_Bool bTryAgain = sal_True;
2154*b1cdbd2cSJim Jagielski while( bTryAgain )
2155*b1cdbd2cSJim Jagielski {
2156*b1cdbd2cSJim Jagielski if ( aDialog->Execute() == RET_OK )
2157*b1cdbd2cSJim Jagielski {
2158*b1cdbd2cSJim Jagielski try
2159*b1cdbd2cSJim Jagielski {
2160*b1cdbd2cSJim Jagielski ::rtl::OUString sNewName;
2161*b1cdbd2cSJim Jagielski if ( eType == E_TABLE )
2162*b1cdbd2cSJim Jagielski {
2163*b1cdbd2cSJim Jagielski ::rtl::OUString sName = aDialog->getName();
2164*b1cdbd2cSJim Jagielski ::rtl::OUString sCatalog = aDialog->getCatalog();
2165*b1cdbd2cSJim Jagielski ::rtl::OUString sSchema = aDialog->getSchema();
2166*b1cdbd2cSJim Jagielski
2167*b1cdbd2cSJim Jagielski sNewName = ::dbtools::composeTableName( m_xMetaData, sCatalog, sSchema, sName, sal_False, ::dbtools::eInDataManipulation );
2168*b1cdbd2cSJim Jagielski }
2169*b1cdbd2cSJim Jagielski else
2170*b1cdbd2cSJim Jagielski sNewName = aDialog->getName();
2171*b1cdbd2cSJim Jagielski
2172*b1cdbd2cSJim Jagielski ::rtl::OUString sOldName = *aList.begin();
2173*b1cdbd2cSJim Jagielski if ( eType == E_FORM || eType == E_REPORT )
2174*b1cdbd2cSJim Jagielski {
2175*b1cdbd2cSJim Jagielski Reference<XContent> xContent(xRename,UNO_QUERY);
2176*b1cdbd2cSJim Jagielski if ( xContent.is() )
2177*b1cdbd2cSJim Jagielski {
2178*b1cdbd2cSJim Jagielski sOldName = xContent->getIdentifier()->getContentIdentifier();
2179*b1cdbd2cSJim Jagielski }
2180*b1cdbd2cSJim Jagielski }
2181*b1cdbd2cSJim Jagielski
2182*b1cdbd2cSJim Jagielski xRename->rename(sNewName);
2183*b1cdbd2cSJim Jagielski
2184*b1cdbd2cSJim Jagielski if ( eType == E_TABLE )
2185*b1cdbd2cSJim Jagielski {
2186*b1cdbd2cSJim Jagielski Reference<XPropertySet> xProp(xRename,UNO_QUERY);
2187*b1cdbd2cSJim Jagielski sNewName = ::dbaui::composeTableName( m_xMetaData, xProp, ::dbtools::eInDataManipulation, false, false, false );
2188*b1cdbd2cSJim Jagielski }
2189*b1cdbd2cSJim Jagielski getContainer()->elementReplaced( eType , sOldName, sNewName );
2190*b1cdbd2cSJim Jagielski
2191*b1cdbd2cSJim Jagielski bTryAgain = sal_False;
2192*b1cdbd2cSJim Jagielski }
2193*b1cdbd2cSJim Jagielski catch(const SQLException& )
2194*b1cdbd2cSJim Jagielski {
2195*b1cdbd2cSJim Jagielski showError( SQLExceptionInfo( ::cppu::getCaughtException() ) );
2196*b1cdbd2cSJim Jagielski
2197*b1cdbd2cSJim Jagielski }
2198*b1cdbd2cSJim Jagielski catch(const ElementExistException& e)
2199*b1cdbd2cSJim Jagielski {
2200*b1cdbd2cSJim Jagielski static ::rtl::OUString sStatus = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("S1000"));
2201*b1cdbd2cSJim Jagielski String sMsg = String( ModuleRes( STR_NAME_ALREADY_EXISTS ) );
2202*b1cdbd2cSJim Jagielski sMsg.SearchAndReplace('#',e.Message);
2203*b1cdbd2cSJim Jagielski showError(SQLExceptionInfo(SQLException(sMsg, e.Context, sStatus, 0, Any())));
2204*b1cdbd2cSJim Jagielski }
2205*b1cdbd2cSJim Jagielski catch(const Exception& )
2206*b1cdbd2cSJim Jagielski {
2207*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2208*b1cdbd2cSJim Jagielski }
2209*b1cdbd2cSJim Jagielski }
2210*b1cdbd2cSJim Jagielski else
2211*b1cdbd2cSJim Jagielski bTryAgain = sal_False;
2212*b1cdbd2cSJim Jagielski }
2213*b1cdbd2cSJim Jagielski }
2214*b1cdbd2cSJim Jagielski }
2215*b1cdbd2cSJim Jagielski }
2216*b1cdbd2cSJim Jagielski catch(const Exception& )
2217*b1cdbd2cSJim Jagielski {
2218*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2219*b1cdbd2cSJim Jagielski }
2220*b1cdbd2cSJim Jagielski }
2221*b1cdbd2cSJim Jagielski
2222*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onSelectionChanged()2223*b1cdbd2cSJim Jagielski void OApplicationController::onSelectionChanged()
2224*b1cdbd2cSJim Jagielski {
2225*b1cdbd2cSJim Jagielski InvalidateAll();
2226*b1cdbd2cSJim Jagielski
2227*b1cdbd2cSJim Jagielski SelectionGuard aSelGuard( *m_pSelectionNotifier );
2228*b1cdbd2cSJim Jagielski
2229*b1cdbd2cSJim Jagielski OApplicationView* pView = getContainer();
2230*b1cdbd2cSJim Jagielski if ( !pView )
2231*b1cdbd2cSJim Jagielski return;
2232*b1cdbd2cSJim Jagielski
2233*b1cdbd2cSJim Jagielski if ( pView->getSelectionCount() == 1 )
2234*b1cdbd2cSJim Jagielski {
2235*b1cdbd2cSJim Jagielski const ElementType eType = pView->getElementType();
2236*b1cdbd2cSJim Jagielski if ( pView->isALeafSelected() )
2237*b1cdbd2cSJim Jagielski {
2238*b1cdbd2cSJim Jagielski const ::rtl::OUString sName = pView->getQualifiedName( NULL /* means 'first selected' */ );
2239*b1cdbd2cSJim Jagielski showPreviewFor( eType, sName );
2240*b1cdbd2cSJim Jagielski }
2241*b1cdbd2cSJim Jagielski }
2242*b1cdbd2cSJim Jagielski }
2243*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
showPreviewFor(const ElementType _eType,const::rtl::OUString & _sName)2244*b1cdbd2cSJim Jagielski void OApplicationController::showPreviewFor(const ElementType _eType,const ::rtl::OUString& _sName)
2245*b1cdbd2cSJim Jagielski {
2246*b1cdbd2cSJim Jagielski if ( m_ePreviewMode == E_PREVIEWNONE )
2247*b1cdbd2cSJim Jagielski return;
2248*b1cdbd2cSJim Jagielski
2249*b1cdbd2cSJim Jagielski OApplicationView* pView = getContainer();
2250*b1cdbd2cSJim Jagielski if ( !pView )
2251*b1cdbd2cSJim Jagielski return;
2252*b1cdbd2cSJim Jagielski
2253*b1cdbd2cSJim Jagielski try
2254*b1cdbd2cSJim Jagielski {
2255*b1cdbd2cSJim Jagielski switch( _eType )
2256*b1cdbd2cSJim Jagielski {
2257*b1cdbd2cSJim Jagielski case E_FORM:
2258*b1cdbd2cSJim Jagielski case E_REPORT:
2259*b1cdbd2cSJim Jagielski {
2260*b1cdbd2cSJim Jagielski Reference< XHierarchicalNameAccess > xContainer( getElements( _eType ), UNO_QUERY_THROW );
2261*b1cdbd2cSJim Jagielski Reference< XContent> xContent( xContainer->getByHierarchicalName( _sName ), UNO_QUERY_THROW );
2262*b1cdbd2cSJim Jagielski pView->showPreview( xContent );
2263*b1cdbd2cSJim Jagielski }
2264*b1cdbd2cSJim Jagielski break;
2265*b1cdbd2cSJim Jagielski
2266*b1cdbd2cSJim Jagielski case E_TABLE:
2267*b1cdbd2cSJim Jagielski case E_QUERY:
2268*b1cdbd2cSJim Jagielski {
2269*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
2270*b1cdbd2cSJim Jagielski if ( xConnection.is() )
2271*b1cdbd2cSJim Jagielski pView->showPreview( getDatabaseName(), xConnection, _sName, _eType == E_TABLE );
2272*b1cdbd2cSJim Jagielski }
2273*b1cdbd2cSJim Jagielski return;
2274*b1cdbd2cSJim Jagielski
2275*b1cdbd2cSJim Jagielski default:
2276*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::showPreviewFor: unexpected element type!" );
2277*b1cdbd2cSJim Jagielski break;
2278*b1cdbd2cSJim Jagielski }
2279*b1cdbd2cSJim Jagielski }
2280*b1cdbd2cSJim Jagielski catch( const SQLException& )
2281*b1cdbd2cSJim Jagielski {
2282*b1cdbd2cSJim Jagielski showError( SQLExceptionInfo( ::cppu::getCaughtException() ) );
2283*b1cdbd2cSJim Jagielski }
2284*b1cdbd2cSJim Jagielski catch(const Exception& )
2285*b1cdbd2cSJim Jagielski {
2286*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2287*b1cdbd2cSJim Jagielski }
2288*b1cdbd2cSJim Jagielski }
2289*b1cdbd2cSJim Jagielski
2290*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IMPL_LINK(OApplicationController,OnClipboardChanged,void *,EMPTYARG)2291*b1cdbd2cSJim Jagielski IMPL_LINK( OApplicationController, OnClipboardChanged, void*, EMPTYARG )
2292*b1cdbd2cSJim Jagielski {
2293*b1cdbd2cSJim Jagielski return OnInvalidateClipboard( NULL );
2294*b1cdbd2cSJim Jagielski }
2295*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IMPL_LINK(OApplicationController,OnInvalidateClipboard,void *,EMPTYARG)2296*b1cdbd2cSJim Jagielski IMPL_LINK(OApplicationController, OnInvalidateClipboard, void*, EMPTYARG)
2297*b1cdbd2cSJim Jagielski {
2298*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_CUT);
2299*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_COPY);
2300*b1cdbd2cSJim Jagielski InvalidateFeature(ID_BROWSER_PASTE);
2301*b1cdbd2cSJim Jagielski InvalidateFeature(SID_DB_APP_PASTE_SPECIAL);
2302*b1cdbd2cSJim Jagielski return 0L;
2303*b1cdbd2cSJim Jagielski }
2304*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onCutEntry()2305*b1cdbd2cSJim Jagielski void OApplicationController::onCutEntry()
2306*b1cdbd2cSJim Jagielski {
2307*b1cdbd2cSJim Jagielski }
2308*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onCopyEntry()2309*b1cdbd2cSJim Jagielski void OApplicationController::onCopyEntry()
2310*b1cdbd2cSJim Jagielski {
2311*b1cdbd2cSJim Jagielski Execute(ID_BROWSER_COPY,Sequence<PropertyValue>());
2312*b1cdbd2cSJim Jagielski }
2313*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onPasteEntry()2314*b1cdbd2cSJim Jagielski void OApplicationController::onPasteEntry()
2315*b1cdbd2cSJim Jagielski {
2316*b1cdbd2cSJim Jagielski Execute(ID_BROWSER_PASTE,Sequence<PropertyValue>());
2317*b1cdbd2cSJim Jagielski }
2318*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onDeleteEntry()2319*b1cdbd2cSJim Jagielski void OApplicationController::onDeleteEntry()
2320*b1cdbd2cSJim Jagielski {
2321*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
2322*b1cdbd2cSJim Jagielski sal_uInt16 nId = 0;
2323*b1cdbd2cSJim Jagielski switch(eType)
2324*b1cdbd2cSJim Jagielski {
2325*b1cdbd2cSJim Jagielski case E_TABLE:
2326*b1cdbd2cSJim Jagielski nId = SID_DB_APP_TABLE_DELETE;
2327*b1cdbd2cSJim Jagielski break;
2328*b1cdbd2cSJim Jagielski case E_QUERY:
2329*b1cdbd2cSJim Jagielski nId = SID_DB_APP_QUERY_DELETE;
2330*b1cdbd2cSJim Jagielski break;
2331*b1cdbd2cSJim Jagielski case E_FORM:
2332*b1cdbd2cSJim Jagielski nId = SID_DB_APP_FORM_DELETE;
2333*b1cdbd2cSJim Jagielski break;
2334*b1cdbd2cSJim Jagielski case E_REPORT:
2335*b1cdbd2cSJim Jagielski nId = SID_DB_APP_REPORT_DELETE;
2336*b1cdbd2cSJim Jagielski break;
2337*b1cdbd2cSJim Jagielski default:
2338*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"Invalid ElementType!");
2339*b1cdbd2cSJim Jagielski break;
2340*b1cdbd2cSJim Jagielski }
2341*b1cdbd2cSJim Jagielski executeChecked(nId,Sequence<PropertyValue>());
2342*b1cdbd2cSJim Jagielski }
2343*b1cdbd2cSJim Jagielski
2344*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
executeUnChecked(const URL & _rCommand,const Sequence<PropertyValue> & aArgs)2345*b1cdbd2cSJim Jagielski void OApplicationController::executeUnChecked(const URL& _rCommand, const Sequence< PropertyValue>& aArgs)
2346*b1cdbd2cSJim Jagielski {
2347*b1cdbd2cSJim Jagielski OApplicationController_CBASE::executeUnChecked( _rCommand, aArgs );
2348*b1cdbd2cSJim Jagielski }
2349*b1cdbd2cSJim Jagielski
2350*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
executeChecked(const URL & _rCommand,const Sequence<PropertyValue> & aArgs)2351*b1cdbd2cSJim Jagielski void OApplicationController::executeChecked(const URL& _rCommand, const Sequence< PropertyValue>& aArgs)
2352*b1cdbd2cSJim Jagielski {
2353*b1cdbd2cSJim Jagielski OApplicationController_CBASE::executeChecked( _rCommand, aArgs );
2354*b1cdbd2cSJim Jagielski }
2355*b1cdbd2cSJim Jagielski
2356*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
executeUnChecked(sal_uInt16 _nCommandId,const Sequence<PropertyValue> & aArgs)2357*b1cdbd2cSJim Jagielski void OApplicationController::executeUnChecked(sal_uInt16 _nCommandId, const Sequence< PropertyValue>& aArgs)
2358*b1cdbd2cSJim Jagielski {
2359*b1cdbd2cSJim Jagielski OApplicationController_CBASE::executeUnChecked( _nCommandId, aArgs );
2360*b1cdbd2cSJim Jagielski }
2361*b1cdbd2cSJim Jagielski
2362*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
executeChecked(sal_uInt16 _nCommandId,const Sequence<PropertyValue> & aArgs)2363*b1cdbd2cSJim Jagielski void OApplicationController::executeChecked(sal_uInt16 _nCommandId, const Sequence< PropertyValue>& aArgs)
2364*b1cdbd2cSJim Jagielski {
2365*b1cdbd2cSJim Jagielski OApplicationController_CBASE::executeChecked( _nCommandId, aArgs );
2366*b1cdbd2cSJim Jagielski }
2367*b1cdbd2cSJim Jagielski
2368*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
isCommandEnabled(sal_uInt16 _nCommandId) const2369*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::isCommandEnabled(sal_uInt16 _nCommandId) const
2370*b1cdbd2cSJim Jagielski {
2371*b1cdbd2cSJim Jagielski return OApplicationController_CBASE::isCommandEnabled( _nCommandId );
2372*b1cdbd2cSJim Jagielski }
2373*b1cdbd2cSJim Jagielski
2374*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
isCommandEnabled(const::rtl::OUString & _rCompleteCommandURL) const2375*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::isCommandEnabled( const ::rtl::OUString& _rCompleteCommandURL ) const
2376*b1cdbd2cSJim Jagielski {
2377*b1cdbd2cSJim Jagielski return OApplicationController_CBASE::isCommandEnabled( _rCompleteCommandURL );
2378*b1cdbd2cSJim Jagielski }
2379*b1cdbd2cSJim Jagielski
2380*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
registerCommandURL(const::rtl::OUString & _rCompleteCommandURL)2381*b1cdbd2cSJim Jagielski sal_uInt16 OApplicationController::registerCommandURL( const ::rtl::OUString& _rCompleteCommandURL )
2382*b1cdbd2cSJim Jagielski {
2383*b1cdbd2cSJim Jagielski return OApplicationController_CBASE::registerCommandURL( _rCompleteCommandURL );
2384*b1cdbd2cSJim Jagielski }
2385*b1cdbd2cSJim Jagielski
2386*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
notifyHiContrastChanged()2387*b1cdbd2cSJim Jagielski void OApplicationController::notifyHiContrastChanged()
2388*b1cdbd2cSJim Jagielski {
2389*b1cdbd2cSJim Jagielski OApplicationController_CBASE::notifyHiContrastChanged();
2390*b1cdbd2cSJim Jagielski }
2391*b1cdbd2cSJim Jagielski
2392*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getXController()2393*b1cdbd2cSJim Jagielski Reference< XController > OApplicationController::getXController() throw( RuntimeException )
2394*b1cdbd2cSJim Jagielski {
2395*b1cdbd2cSJim Jagielski return OApplicationController_CBASE::getXController();
2396*b1cdbd2cSJim Jagielski }
2397*b1cdbd2cSJim Jagielski
2398*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
interceptUserInput(const NotifyEvent & _rEvent)2399*b1cdbd2cSJim Jagielski bool OApplicationController::interceptUserInput( const NotifyEvent& _rEvent )
2400*b1cdbd2cSJim Jagielski {
2401*b1cdbd2cSJim Jagielski return OApplicationController_CBASE::interceptUserInput( _rEvent );
2402*b1cdbd2cSJim Jagielski }
2403*b1cdbd2cSJim Jagielski
2404*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getContextMenu(Control &) const2405*b1cdbd2cSJim Jagielski PopupMenu* OApplicationController::getContextMenu( Control& /*_rControl*/ ) const
2406*b1cdbd2cSJim Jagielski {
2407*b1cdbd2cSJim Jagielski return new PopupMenu( ModuleRes( RID_MENU_APP_EDIT ) );
2408*b1cdbd2cSJim Jagielski }
2409*b1cdbd2cSJim Jagielski
2410*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCommandController()2411*b1cdbd2cSJim Jagielski IController& OApplicationController::getCommandController()
2412*b1cdbd2cSJim Jagielski {
2413*b1cdbd2cSJim Jagielski return *static_cast< IApplicationController* >( this );
2414*b1cdbd2cSJim Jagielski }
2415*b1cdbd2cSJim Jagielski
2416*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getContextMenuInterceptors()2417*b1cdbd2cSJim Jagielski ::cppu::OInterfaceContainerHelper* OApplicationController::getContextMenuInterceptors()
2418*b1cdbd2cSJim Jagielski {
2419*b1cdbd2cSJim Jagielski return &m_aContextMenuInterceptors;
2420*b1cdbd2cSJim Jagielski }
2421*b1cdbd2cSJim Jagielski
2422*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCurrentSelection(Control & _rControl) const2423*b1cdbd2cSJim Jagielski Any OApplicationController::getCurrentSelection( Control& _rControl ) const
2424*b1cdbd2cSJim Jagielski {
2425*b1cdbd2cSJim Jagielski Sequence< NamedDatabaseObject > aSelection;
2426*b1cdbd2cSJim Jagielski getContainer()->describeCurrentSelectionForControl( _rControl, aSelection );
2427*b1cdbd2cSJim Jagielski return makeAny( aSelection );
2428*b1cdbd2cSJim Jagielski }
2429*b1cdbd2cSJim Jagielski
2430*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
requestQuickHelp(const SvLBoxEntry *,String &) const2431*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::requestQuickHelp( const SvLBoxEntry* /*_pEntry*/, String& /*_rText*/ ) const
2432*b1cdbd2cSJim Jagielski {
2433*b1cdbd2cSJim Jagielski return sal_False;
2434*b1cdbd2cSJim Jagielski }
2435*b1cdbd2cSJim Jagielski
2436*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
requestDrag(sal_Int8,const Point &)2437*b1cdbd2cSJim Jagielski sal_Bool OApplicationController::requestDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPixel*/ )
2438*b1cdbd2cSJim Jagielski {
2439*b1cdbd2cSJim Jagielski TransferableHelper* pTransfer = NULL;
2440*b1cdbd2cSJim Jagielski if ( getContainer() && getContainer()->getSelectionCount() )
2441*b1cdbd2cSJim Jagielski {
2442*b1cdbd2cSJim Jagielski try
2443*b1cdbd2cSJim Jagielski {
2444*b1cdbd2cSJim Jagielski pTransfer = copyObject( );
2445*b1cdbd2cSJim Jagielski Reference< XTransferable> xEnsureDelete = pTransfer;
2446*b1cdbd2cSJim Jagielski
2447*b1cdbd2cSJim Jagielski if ( pTransfer && getContainer()->getDetailView() )
2448*b1cdbd2cSJim Jagielski {
2449*b1cdbd2cSJim Jagielski ElementType eType = getContainer()->getElementType();
2450*b1cdbd2cSJim Jagielski pTransfer->StartDrag( getContainer()->getDetailView()->getTreeWindow(), ((eType == E_FORM || eType == E_REPORT) ? DND_ACTION_COPYMOVE : DND_ACTION_COPY) );
2451*b1cdbd2cSJim Jagielski }
2452*b1cdbd2cSJim Jagielski }
2453*b1cdbd2cSJim Jagielski catch(const Exception& )
2454*b1cdbd2cSJim Jagielski {
2455*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2456*b1cdbd2cSJim Jagielski }
2457*b1cdbd2cSJim Jagielski }
2458*b1cdbd2cSJim Jagielski
2459*b1cdbd2cSJim Jagielski return NULL != pTransfer;
2460*b1cdbd2cSJim Jagielski }
2461*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
queryDrop(const AcceptDropEvent & _rEvt,const DataFlavorExVector & _rFlavors)2462*b1cdbd2cSJim Jagielski sal_Int8 OApplicationController::queryDrop( const AcceptDropEvent& _rEvt, const DataFlavorExVector& _rFlavors )
2463*b1cdbd2cSJim Jagielski {
2464*b1cdbd2cSJim Jagielski sal_Int8 nActionAskedFor = _rEvt.mnAction;
2465*b1cdbd2cSJim Jagielski // check if we're a table or query container
2466*b1cdbd2cSJim Jagielski OApplicationView* pView = getContainer();
2467*b1cdbd2cSJim Jagielski if ( pView && !isDataSourceReadOnly() )
2468*b1cdbd2cSJim Jagielski {
2469*b1cdbd2cSJim Jagielski ElementType eType = pView->getElementType();
2470*b1cdbd2cSJim Jagielski if ( eType != E_NONE && (eType != E_TABLE || !isConnectionReadOnly()) )
2471*b1cdbd2cSJim Jagielski {
2472*b1cdbd2cSJim Jagielski // check for the concrete type
2473*b1cdbd2cSJim Jagielski if(::std::find_if(_rFlavors.begin(),_rFlavors.end(),TAppSupportedSotFunctor(eType,sal_True)) != _rFlavors.end())
2474*b1cdbd2cSJim Jagielski return DND_ACTION_COPY;
2475*b1cdbd2cSJim Jagielski if ( eType == E_FORM || eType == E_REPORT )
2476*b1cdbd2cSJim Jagielski {
2477*b1cdbd2cSJim Jagielski sal_Int8 nAction = OComponentTransferable::canExtractComponentDescriptor(_rFlavors,eType == E_FORM) ? DND_ACTION_COPY : DND_ACTION_NONE;
2478*b1cdbd2cSJim Jagielski if ( nAction != DND_ACTION_NONE )
2479*b1cdbd2cSJim Jagielski {
2480*b1cdbd2cSJim Jagielski SvLBoxEntry* pHitEntry = pView->getEntry(_rEvt.maPosPixel);
2481*b1cdbd2cSJim Jagielski ::rtl::OUString sName;
2482*b1cdbd2cSJim Jagielski if ( pHitEntry )
2483*b1cdbd2cSJim Jagielski {
2484*b1cdbd2cSJim Jagielski sName = pView->getQualifiedName( pHitEntry );
2485*b1cdbd2cSJim Jagielski if ( sName.getLength() )
2486*b1cdbd2cSJim Jagielski {
2487*b1cdbd2cSJim Jagielski Reference< XHierarchicalNameAccess > xContainer(getElements(pView->getElementType()),UNO_QUERY);
2488*b1cdbd2cSJim Jagielski if ( xContainer.is() && xContainer->hasByHierarchicalName(sName) )
2489*b1cdbd2cSJim Jagielski {
2490*b1cdbd2cSJim Jagielski Reference< XHierarchicalNameAccess > xHitObject(xContainer->getByHierarchicalName(sName),UNO_QUERY);
2491*b1cdbd2cSJim Jagielski if ( xHitObject.is() )
2492*b1cdbd2cSJim Jagielski nAction = nActionAskedFor & DND_ACTION_COPYMOVE;
2493*b1cdbd2cSJim Jagielski }
2494*b1cdbd2cSJim Jagielski else
2495*b1cdbd2cSJim Jagielski nAction = DND_ACTION_NONE;
2496*b1cdbd2cSJim Jagielski }
2497*b1cdbd2cSJim Jagielski }
2498*b1cdbd2cSJim Jagielski /*else
2499*b1cdbd2cSJim Jagielski nAction = nActionAskedFor & DND_ACTION_COPYMOVE;
2500*b1cdbd2cSJim Jagielski */
2501*b1cdbd2cSJim Jagielski }
2502*b1cdbd2cSJim Jagielski return nAction;
2503*b1cdbd2cSJim Jagielski }
2504*b1cdbd2cSJim Jagielski }
2505*b1cdbd2cSJim Jagielski }
2506*b1cdbd2cSJim Jagielski
2507*b1cdbd2cSJim Jagielski return DND_ACTION_NONE;
2508*b1cdbd2cSJim Jagielski }
2509*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
executeDrop(const ExecuteDropEvent & _rEvt)2510*b1cdbd2cSJim Jagielski sal_Int8 OApplicationController::executeDrop( const ExecuteDropEvent& _rEvt )
2511*b1cdbd2cSJim Jagielski {
2512*b1cdbd2cSJim Jagielski OApplicationView* pView = getContainer();
2513*b1cdbd2cSJim Jagielski if ( !pView || pView->getElementType() == E_NONE )
2514*b1cdbd2cSJim Jagielski {
2515*b1cdbd2cSJim Jagielski DBG_ERROR("OApplicationController::executeDrop: what the hell did queryDrop do?");
2516*b1cdbd2cSJim Jagielski // queryDrop shoud not have allowed us to reach this situation ....
2517*b1cdbd2cSJim Jagielski return DND_ACTION_NONE;
2518*b1cdbd2cSJim Jagielski }
2519*b1cdbd2cSJim Jagielski
2520*b1cdbd2cSJim Jagielski // a TransferableDataHelper for accessing the dropped data
2521*b1cdbd2cSJim Jagielski TransferableDataHelper aDroppedData(_rEvt.maDropEvent.Transferable);
2522*b1cdbd2cSJim Jagielski
2523*b1cdbd2cSJim Jagielski
2524*b1cdbd2cSJim Jagielski // reset the data of the previous async drop (if any)
2525*b1cdbd2cSJim Jagielski if ( m_nAsyncDrop )
2526*b1cdbd2cSJim Jagielski Application::RemoveUserEvent(m_nAsyncDrop);
2527*b1cdbd2cSJim Jagielski
2528*b1cdbd2cSJim Jagielski
2529*b1cdbd2cSJim Jagielski m_nAsyncDrop = 0;
2530*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData.clear();
2531*b1cdbd2cSJim Jagielski m_aAsyncDrop.nType = pView->getElementType();
2532*b1cdbd2cSJim Jagielski m_aAsyncDrop.nAction = _rEvt.mnAction;
2533*b1cdbd2cSJim Jagielski m_aAsyncDrop.bError = sal_False;
2534*b1cdbd2cSJim Jagielski m_aAsyncDrop.bHtml = sal_False;
2535*b1cdbd2cSJim Jagielski m_aAsyncDrop.aUrl = ::rtl::OUString();
2536*b1cdbd2cSJim Jagielski
2537*b1cdbd2cSJim Jagielski
2538*b1cdbd2cSJim Jagielski // loop through the available formats and see what we can do ...
2539*b1cdbd2cSJim Jagielski // first we have to check if it is our own format, if not we have to copy the stream :-(
2540*b1cdbd2cSJim Jagielski if ( ODataAccessObjectTransferable::canExtractObjectDescriptor(aDroppedData.GetDataFlavorExVector()) )
2541*b1cdbd2cSJim Jagielski {
2542*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData = ODataAccessObjectTransferable::extractObjectDescriptor(aDroppedData);
2543*b1cdbd2cSJim Jagielski
2544*b1cdbd2cSJim Jagielski // asyncron because we some dialogs and we aren't allowed to show them while in D&D
2545*b1cdbd2cSJim Jagielski m_nAsyncDrop = Application::PostUserEvent(LINK(this, OApplicationController, OnAsyncDrop));
2546*b1cdbd2cSJim Jagielski return DND_ACTION_COPY;
2547*b1cdbd2cSJim Jagielski }
2548*b1cdbd2cSJim Jagielski else if ( OComponentTransferable::canExtractComponentDescriptor(aDroppedData.GetDataFlavorExVector(),m_aAsyncDrop.nType == E_FORM) )
2549*b1cdbd2cSJim Jagielski {
2550*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData = OComponentTransferable::extractComponentDescriptor(aDroppedData);
2551*b1cdbd2cSJim Jagielski SvLBoxEntry* pHitEntry = pView->getEntry(_rEvt.maPosPixel);
2552*b1cdbd2cSJim Jagielski if ( pHitEntry )
2553*b1cdbd2cSJim Jagielski m_aAsyncDrop.aUrl = pView->getQualifiedName( pHitEntry );
2554*b1cdbd2cSJim Jagielski
2555*b1cdbd2cSJim Jagielski sal_Int8 nAction = _rEvt.mnAction;
2556*b1cdbd2cSJim Jagielski Reference<XContent> xContent;
2557*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData[daComponent] >>= xContent;
2558*b1cdbd2cSJim Jagielski if ( xContent.is() )
2559*b1cdbd2cSJim Jagielski {
2560*b1cdbd2cSJim Jagielski ::rtl::OUString sName = xContent->getIdentifier()->getContentIdentifier();
2561*b1cdbd2cSJim Jagielski sal_Int32 nIndex = 0;
2562*b1cdbd2cSJim Jagielski sName = sName.copy(sName.getToken(0,'/',nIndex).getLength() + 1);
2563*b1cdbd2cSJim Jagielski if ( m_aAsyncDrop.aUrl.Len() >= sName.getLength() && 0 == sName.compareTo(m_aAsyncDrop.aUrl,sName.getLength()) )
2564*b1cdbd2cSJim Jagielski {
2565*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData.clear();
2566*b1cdbd2cSJim Jagielski return DND_ACTION_NONE;
2567*b1cdbd2cSJim Jagielski }
2568*b1cdbd2cSJim Jagielski
2569*b1cdbd2cSJim Jagielski // check if move is allowed, if another object with the same name exists only copy is allowed
2570*b1cdbd2cSJim Jagielski Reference< XHierarchicalNameAccess > xContainer(getElements(m_aAsyncDrop.nType),UNO_QUERY);
2571*b1cdbd2cSJim Jagielski Reference<XNameAccess> xNameAccess(xContainer,UNO_QUERY);
2572*b1cdbd2cSJim Jagielski
2573*b1cdbd2cSJim Jagielski if ( m_aAsyncDrop.aUrl.Len() && xContainer.is() && xContainer->hasByHierarchicalName(m_aAsyncDrop.aUrl) )
2574*b1cdbd2cSJim Jagielski xNameAccess.set(xContainer->getByHierarchicalName(m_aAsyncDrop.aUrl),UNO_QUERY);
2575*b1cdbd2cSJim Jagielski
2576*b1cdbd2cSJim Jagielski if ( xNameAccess.is() )
2577*b1cdbd2cSJim Jagielski {
2578*b1cdbd2cSJim Jagielski Reference<XPropertySet> xProp(xContent,UNO_QUERY);
2579*b1cdbd2cSJim Jagielski if ( xProp.is() )
2580*b1cdbd2cSJim Jagielski {
2581*b1cdbd2cSJim Jagielski xProp->getPropertyValue(PROPERTY_NAME) >>= sName;
2582*b1cdbd2cSJim Jagielski if ( xNameAccess.is() && xNameAccess->hasByName(sName) )
2583*b1cdbd2cSJim Jagielski nAction &= ~DND_ACTION_MOVE;
2584*b1cdbd2cSJim Jagielski }
2585*b1cdbd2cSJim Jagielski else
2586*b1cdbd2cSJim Jagielski nAction &= ~DND_ACTION_MOVE;
2587*b1cdbd2cSJim Jagielski }
2588*b1cdbd2cSJim Jagielski }
2589*b1cdbd2cSJim Jagielski if ( nAction != DND_ACTION_NONE )
2590*b1cdbd2cSJim Jagielski {
2591*b1cdbd2cSJim Jagielski m_aAsyncDrop.nAction = nAction;
2592*b1cdbd2cSJim Jagielski // asyncron because we some dialogs and we aren't allowed to show them while in D&D
2593*b1cdbd2cSJim Jagielski m_nAsyncDrop = Application::PostUserEvent(LINK(this, OApplicationController, OnAsyncDrop));
2594*b1cdbd2cSJim Jagielski }
2595*b1cdbd2cSJim Jagielski else
2596*b1cdbd2cSJim Jagielski m_aAsyncDrop.aDroppedData.clear();
2597*b1cdbd2cSJim Jagielski return nAction;
2598*b1cdbd2cSJim Jagielski }
2599*b1cdbd2cSJim Jagielski else
2600*b1cdbd2cSJim Jagielski {
2601*b1cdbd2cSJim Jagielski SharedConnection xConnection( ensureConnection() );
2602*b1cdbd2cSJim Jagielski if ( xConnection.is() && m_aTableCopyHelper.copyTagTable( aDroppedData, m_aAsyncDrop, xConnection ) )
2603*b1cdbd2cSJim Jagielski {
2604*b1cdbd2cSJim Jagielski // asyncron because we some dialogs and we aren't allowed to show them while in D&D
2605*b1cdbd2cSJim Jagielski m_nAsyncDrop = Application::PostUserEvent(LINK(this, OApplicationController, OnAsyncDrop));
2606*b1cdbd2cSJim Jagielski return DND_ACTION_COPY;
2607*b1cdbd2cSJim Jagielski }
2608*b1cdbd2cSJim Jagielski }
2609*b1cdbd2cSJim Jagielski
2610*b1cdbd2cSJim Jagielski return DND_ACTION_NONE;
2611*b1cdbd2cSJim Jagielski }
2612*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getModel(void)2613*b1cdbd2cSJim Jagielski Reference< XModel > SAL_CALL OApplicationController::getModel(void) throw( RuntimeException )
2614*b1cdbd2cSJim Jagielski {
2615*b1cdbd2cSJim Jagielski return m_xModel;
2616*b1cdbd2cSJim Jagielski }
2617*b1cdbd2cSJim Jagielski
2618*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
onAttachedFrame()2619*b1cdbd2cSJim Jagielski void OApplicationController::onAttachedFrame()
2620*b1cdbd2cSJim Jagielski {
2621*b1cdbd2cSJim Jagielski sal_Int32 nConnectedControllers( 0 );
2622*b1cdbd2cSJim Jagielski try
2623*b1cdbd2cSJim Jagielski {
2624*b1cdbd2cSJim Jagielski Reference< XModel2 > xModel( m_xModel, UNO_QUERY_THROW );
2625*b1cdbd2cSJim Jagielski Reference< XEnumeration > xEnumControllers( xModel->getControllers(), UNO_SET_THROW );
2626*b1cdbd2cSJim Jagielski while ( xEnumControllers->hasMoreElements() )
2627*b1cdbd2cSJim Jagielski {
2628*b1cdbd2cSJim Jagielski Reference< XController > xController( xEnumControllers->nextElement(), UNO_QUERY_THROW );
2629*b1cdbd2cSJim Jagielski ++nConnectedControllers;
2630*b1cdbd2cSJim Jagielski }
2631*b1cdbd2cSJim Jagielski }
2632*b1cdbd2cSJim Jagielski catch( const Exception& )
2633*b1cdbd2cSJim Jagielski {
2634*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2635*b1cdbd2cSJim Jagielski }
2636*b1cdbd2cSJim Jagielski
2637*b1cdbd2cSJim Jagielski if ( nConnectedControllers > 1 )
2638*b1cdbd2cSJim Jagielski { // we are not the first connected controller, there were already others
2639*b1cdbd2cSJim Jagielski return;
2640*b1cdbd2cSJim Jagielski }
2641*b1cdbd2cSJim Jagielski
2642*b1cdbd2cSJim Jagielski m_aControllerConnectedEvent.Call();
2643*b1cdbd2cSJim Jagielski }
2644*b1cdbd2cSJim Jagielski
2645*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
2646*b1cdbd2cSJim Jagielski IMPL_LINK( OApplicationController, OnFirstControllerConnected, void*, /**/ )
2647*b1cdbd2cSJim Jagielski {
2648*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
2649*b1cdbd2cSJim Jagielski
2650*b1cdbd2cSJim Jagielski if ( !m_xModel.is() )
2651*b1cdbd2cSJim Jagielski {
2652*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::OnFirstControllerConnected: too late!" );
2653*b1cdbd2cSJim Jagielski }
2654*b1cdbd2cSJim Jagielski
2655*b1cdbd2cSJim Jagielski // if we have forms or reports which contain macros/scripts, then show a warning
2656*b1cdbd2cSJim Jagielski // which suggests the user to migrate them to the database document
2657*b1cdbd2cSJim Jagielski Reference< XEmbeddedScripts > xDocumentScripts( m_xModel, UNO_QUERY );
2658*b1cdbd2cSJim Jagielski if ( xDocumentScripts.is() )
2659*b1cdbd2cSJim Jagielski {
2660*b1cdbd2cSJim Jagielski // no need to show this warning, obviously the document supports embedding scripts
2661*b1cdbd2cSJim Jagielski // into itself, so there are no "old-style" forms/reports which have macros/scripts
2662*b1cdbd2cSJim Jagielski // themselves
2663*b1cdbd2cSJim Jagielski return 0L;
2664*b1cdbd2cSJim Jagielski }
2665*b1cdbd2cSJim Jagielski
2666*b1cdbd2cSJim Jagielski try
2667*b1cdbd2cSJim Jagielski {
2668*b1cdbd2cSJim Jagielski // If the migration just happened, but was not successful, the document is reloaded.
2669*b1cdbd2cSJim Jagielski // In this case, we should not show the warning, again.
2670*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aModelArgs( m_xModel->getArgs() );
2671*b1cdbd2cSJim Jagielski if ( aModelArgs.getOrDefault( "SuppressMigrationWarning", sal_False ) )
2672*b1cdbd2cSJim Jagielski return 0L;
2673*b1cdbd2cSJim Jagielski
2674*b1cdbd2cSJim Jagielski // also, if the document is read-only, then no migration is possible, and the
2675*b1cdbd2cSJim Jagielski // respective menu entry is hidden. So, don't show the warning in this case, too.
2676*b1cdbd2cSJim Jagielski if ( Reference< XStorable >( m_xModel, UNO_QUERY_THROW )->isReadonly() )
2677*b1cdbd2cSJim Jagielski return 0L;
2678*b1cdbd2cSJim Jagielski
2679*b1cdbd2cSJim Jagielski SQLWarning aWarning;
2680*b1cdbd2cSJim Jagielski aWarning.Message = String( ModuleRes( STR_SUB_DOCS_WITH_SCRIPTS ) );
2681*b1cdbd2cSJim Jagielski SQLException aDetail;
2682*b1cdbd2cSJim Jagielski aDetail.Message = String( ModuleRes( STR_SUB_DOCS_WITH_SCRIPTS_DETAIL ) );
2683*b1cdbd2cSJim Jagielski aWarning.NextException <<= aDetail;
2684*b1cdbd2cSJim Jagielski
2685*b1cdbd2cSJim Jagielski ::comphelper::ComponentContext aContext( getORB() );
2686*b1cdbd2cSJim Jagielski Sequence< Any > aArgs(1);
2687*b1cdbd2cSJim Jagielski aArgs[0] <<= NamedValue( PROPERTY_SQLEXCEPTION, makeAny( aWarning ) );
2688*b1cdbd2cSJim Jagielski Reference< XExecutableDialog > xDialog(
2689*b1cdbd2cSJim Jagielski aContext.createComponentWithArguments( "com.sun.star.sdb.ErrorMessageDialog", aArgs ),
2690*b1cdbd2cSJim Jagielski UNO_QUERY_THROW );
2691*b1cdbd2cSJim Jagielski xDialog->execute();
2692*b1cdbd2cSJim Jagielski }
2693*b1cdbd2cSJim Jagielski catch( const Exception& )
2694*b1cdbd2cSJim Jagielski {
2695*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2696*b1cdbd2cSJim Jagielski }
2697*b1cdbd2cSJim Jagielski
2698*b1cdbd2cSJim Jagielski return 1L;
2699*b1cdbd2cSJim Jagielski }
2700*b1cdbd2cSJim Jagielski
2701*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
attachFrame(const Reference<XFrame> & i_rxFrame)2702*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::attachFrame( const Reference< XFrame > & i_rxFrame ) throw( RuntimeException )
2703*b1cdbd2cSJim Jagielski {
2704*b1cdbd2cSJim Jagielski OApplicationController_CBASE::attachFrame( i_rxFrame );
2705*b1cdbd2cSJim Jagielski if ( getFrame().is() )
2706*b1cdbd2cSJim Jagielski onAttachedFrame();
2707*b1cdbd2cSJim Jagielski }
2708*b1cdbd2cSJim Jagielski
2709*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
attachModel(const Reference<XModel> & _rxModel)2710*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL OApplicationController::attachModel(const Reference< XModel > & _rxModel) throw( RuntimeException )
2711*b1cdbd2cSJim Jagielski {
2712*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
2713*b1cdbd2cSJim Jagielski const Reference< XOfficeDatabaseDocument > xOfficeDoc( _rxModel, UNO_QUERY );
2714*b1cdbd2cSJim Jagielski const Reference< XModifiable > xDocModify( _rxModel, UNO_QUERY );
2715*b1cdbd2cSJim Jagielski if ( ( !xOfficeDoc.is() || !xDocModify.is() ) && _rxModel.is() )
2716*b1cdbd2cSJim Jagielski {
2717*b1cdbd2cSJim Jagielski DBG_ERROR( "OApplicationController::attachModel: invalid model!" );
2718*b1cdbd2cSJim Jagielski return sal_False;
2719*b1cdbd2cSJim Jagielski }
2720*b1cdbd2cSJim Jagielski
2721*b1cdbd2cSJim Jagielski if ( m_xModel.is() && ( m_xModel != _rxModel ) && ( _rxModel.is() ) )
2722*b1cdbd2cSJim Jagielski {
2723*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::attachModel: missing implementation: setting a new model while we have another one!" );
2724*b1cdbd2cSJim Jagielski // we'd need to completely update our view here, close sub components, and the like
2725*b1cdbd2cSJim Jagielski return sal_False;
2726*b1cdbd2cSJim Jagielski }
2727*b1cdbd2cSJim Jagielski
2728*b1cdbd2cSJim Jagielski const ::rtl::OUString aPropertyNames[] =
2729*b1cdbd2cSJim Jagielski {
2730*b1cdbd2cSJim Jagielski PROPERTY_URL, PROPERTY_USER
2731*b1cdbd2cSJim Jagielski };
2732*b1cdbd2cSJim Jagielski
2733*b1cdbd2cSJim Jagielski // disconnect from old model
2734*b1cdbd2cSJim Jagielski try
2735*b1cdbd2cSJim Jagielski {
2736*b1cdbd2cSJim Jagielski if ( m_xDataSource.is() )
2737*b1cdbd2cSJim Jagielski {
2738*b1cdbd2cSJim Jagielski for ( size_t i=0; i < sizeof( aPropertyNames ) / sizeof( aPropertyNames[0] ); ++i )
2739*b1cdbd2cSJim Jagielski {
2740*b1cdbd2cSJim Jagielski m_xDataSource->removePropertyChangeListener( aPropertyNames[i], this );
2741*b1cdbd2cSJim Jagielski }
2742*b1cdbd2cSJim Jagielski }
2743*b1cdbd2cSJim Jagielski
2744*b1cdbd2cSJim Jagielski Reference< XModifyBroadcaster > xBroadcaster( m_xModel, UNO_QUERY );
2745*b1cdbd2cSJim Jagielski if ( xBroadcaster.is() )
2746*b1cdbd2cSJim Jagielski xBroadcaster->removeModifyListener( this );
2747*b1cdbd2cSJim Jagielski }
2748*b1cdbd2cSJim Jagielski catch( const Exception& )
2749*b1cdbd2cSJim Jagielski {
2750*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2751*b1cdbd2cSJim Jagielski }
2752*b1cdbd2cSJim Jagielski
2753*b1cdbd2cSJim Jagielski m_xModel = _rxModel;
2754*b1cdbd2cSJim Jagielski m_xDocumentModify = xDocModify;
2755*b1cdbd2cSJim Jagielski m_xDataSource.set( xOfficeDoc.is() ? xOfficeDoc->getDataSource() : Reference< XDataSource >(), UNO_QUERY );
2756*b1cdbd2cSJim Jagielski
2757*b1cdbd2cSJim Jagielski // connect to new model
2758*b1cdbd2cSJim Jagielski try
2759*b1cdbd2cSJim Jagielski {
2760*b1cdbd2cSJim Jagielski if ( m_xDataSource.is() )
2761*b1cdbd2cSJim Jagielski {
2762*b1cdbd2cSJim Jagielski for ( size_t i=0; i < sizeof( aPropertyNames ) / sizeof( aPropertyNames[0] ); ++i )
2763*b1cdbd2cSJim Jagielski {
2764*b1cdbd2cSJim Jagielski m_xDataSource->addPropertyChangeListener( aPropertyNames[i], this );
2765*b1cdbd2cSJim Jagielski }
2766*b1cdbd2cSJim Jagielski }
2767*b1cdbd2cSJim Jagielski
2768*b1cdbd2cSJim Jagielski Reference< XModifyBroadcaster > xBroadcaster( m_xModel, UNO_QUERY_THROW );
2769*b1cdbd2cSJim Jagielski xBroadcaster->addModifyListener( this );
2770*b1cdbd2cSJim Jagielski
2771*b1cdbd2cSJim Jagielski }
2772*b1cdbd2cSJim Jagielski catch( const Exception& )
2773*b1cdbd2cSJim Jagielski {
2774*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2775*b1cdbd2cSJim Jagielski }
2776*b1cdbd2cSJim Jagielski
2777*b1cdbd2cSJim Jagielski // initial preview mode
2778*b1cdbd2cSJim Jagielski if ( m_xDataSource.is() )
2779*b1cdbd2cSJim Jagielski {
2780*b1cdbd2cSJim Jagielski try
2781*b1cdbd2cSJim Jagielski {
2782*b1cdbd2cSJim Jagielski // to get the 'modified' for the data source
2783*b1cdbd2cSJim Jagielski ::comphelper::NamedValueCollection aLayoutInfo( m_xDataSource->getPropertyValue( PROPERTY_LAYOUTINFORMATION ) );
2784*b1cdbd2cSJim Jagielski if ( aLayoutInfo.has( (rtl::OUString)INFO_PREVIEW ) )
2785*b1cdbd2cSJim Jagielski {
2786*b1cdbd2cSJim Jagielski const sal_Int32 nPreviewMode( aLayoutInfo.getOrDefault( (rtl::OUString)INFO_PREVIEW, (sal_Int32)0 ) );
2787*b1cdbd2cSJim Jagielski m_ePreviewMode = static_cast< PreviewMode >( nPreviewMode );
2788*b1cdbd2cSJim Jagielski if ( getView() )
2789*b1cdbd2cSJim Jagielski getContainer()->switchPreview( m_ePreviewMode );
2790*b1cdbd2cSJim Jagielski }
2791*b1cdbd2cSJim Jagielski }
2792*b1cdbd2cSJim Jagielski catch( const Exception& )
2793*b1cdbd2cSJim Jagielski {
2794*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2795*b1cdbd2cSJim Jagielski }
2796*b1cdbd2cSJim Jagielski }
2797*b1cdbd2cSJim Jagielski
2798*b1cdbd2cSJim Jagielski return sal_True;
2799*b1cdbd2cSJim Jagielski }
2800*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
containerFound(const Reference<XContainer> & _xContainer)2801*b1cdbd2cSJim Jagielski void OApplicationController::containerFound( const Reference< XContainer >& _xContainer)
2802*b1cdbd2cSJim Jagielski {
2803*b1cdbd2cSJim Jagielski try
2804*b1cdbd2cSJim Jagielski {
2805*b1cdbd2cSJim Jagielski if ( _xContainer.is() )
2806*b1cdbd2cSJim Jagielski {
2807*b1cdbd2cSJim Jagielski m_aCurrentContainers.push_back(_xContainer);
2808*b1cdbd2cSJim Jagielski _xContainer->addContainerListener(this);
2809*b1cdbd2cSJim Jagielski }
2810*b1cdbd2cSJim Jagielski }
2811*b1cdbd2cSJim Jagielski catch(const Exception&)
2812*b1cdbd2cSJim Jagielski {
2813*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2814*b1cdbd2cSJim Jagielski }
2815*b1cdbd2cSJim Jagielski }
2816*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getCurrentlySelectedName(sal_Int32 & _rnCommandType) const2817*b1cdbd2cSJim Jagielski ::rtl::OUString OApplicationController::getCurrentlySelectedName(sal_Int32& _rnCommandType) const
2818*b1cdbd2cSJim Jagielski {
2819*b1cdbd2cSJim Jagielski _rnCommandType = ( (getContainer()->getElementType() == E_QUERY)
2820*b1cdbd2cSJim Jagielski ? CommandType::QUERY : ( (getContainer()->getElementType() == E_TABLE) ? CommandType::TABLE : -1 ));
2821*b1cdbd2cSJim Jagielski
2822*b1cdbd2cSJim Jagielski
2823*b1cdbd2cSJim Jagielski ::rtl::OUString sName;
2824*b1cdbd2cSJim Jagielski if ( _rnCommandType != -1 )
2825*b1cdbd2cSJim Jagielski {
2826*b1cdbd2cSJim Jagielski try
2827*b1cdbd2cSJim Jagielski {
2828*b1cdbd2cSJim Jagielski sName = getContainer()->getQualifiedName( NULL );
2829*b1cdbd2cSJim Jagielski OSL_ENSURE( sName.getLength(), "OApplicationController::getCurrentlySelectedName: no name given!" );
2830*b1cdbd2cSJim Jagielski }
2831*b1cdbd2cSJim Jagielski catch( const Exception& )
2832*b1cdbd2cSJim Jagielski {
2833*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
2834*b1cdbd2cSJim Jagielski }
2835*b1cdbd2cSJim Jagielski }
2836*b1cdbd2cSJim Jagielski return sName;
2837*b1cdbd2cSJim Jagielski }
2838*b1cdbd2cSJim Jagielski
2839*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
addSelectionChangeListener(const Reference<view::XSelectionChangeListener> & _Listener)2840*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::addSelectionChangeListener( const Reference< view::XSelectionChangeListener >& _Listener ) throw (RuntimeException)
2841*b1cdbd2cSJim Jagielski {
2842*b1cdbd2cSJim Jagielski m_pSelectionNotifier->addListener( _Listener );
2843*b1cdbd2cSJim Jagielski }
2844*b1cdbd2cSJim Jagielski
2845*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
removeSelectionChangeListener(const Reference<view::XSelectionChangeListener> & _Listener)2846*b1cdbd2cSJim Jagielski void SAL_CALL OApplicationController::removeSelectionChangeListener( const Reference< view::XSelectionChangeListener >& _Listener ) throw (RuntimeException)
2847*b1cdbd2cSJim Jagielski {
2848*b1cdbd2cSJim Jagielski m_pSelectionNotifier->removeListener( _Listener );
2849*b1cdbd2cSJim Jagielski }
2850*b1cdbd2cSJim Jagielski
2851*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
select(const Any & _aSelection)2852*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL OApplicationController::select( const Any& _aSelection ) throw (IllegalArgumentException, RuntimeException)
2853*b1cdbd2cSJim Jagielski {
2854*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
2855*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
2856*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString> aSelection;
2857*b1cdbd2cSJim Jagielski if ( !_aSelection.hasValue() || !getView() )
2858*b1cdbd2cSJim Jagielski {
2859*b1cdbd2cSJim Jagielski getContainer()->selectElements(aSelection);
2860*b1cdbd2cSJim Jagielski return sal_True;
2861*b1cdbd2cSJim Jagielski }
2862*b1cdbd2cSJim Jagielski
2863*b1cdbd2cSJim Jagielski // --------------------------------------------------------------
2864*b1cdbd2cSJim Jagielski // BEGIN compatibility
2865*b1cdbd2cSJim Jagielski Sequence< NamedValue > aCurrentSelection;
2866*b1cdbd2cSJim Jagielski if ( (_aSelection >>= aCurrentSelection) && aCurrentSelection.getLength() )
2867*b1cdbd2cSJim Jagielski {
2868*b1cdbd2cSJim Jagielski ElementType eType = E_NONE;
2869*b1cdbd2cSJim Jagielski const NamedValue* pIter = aCurrentSelection.getConstArray();
2870*b1cdbd2cSJim Jagielski const NamedValue* pEnd = pIter + aCurrentSelection.getLength();
2871*b1cdbd2cSJim Jagielski for(;pIter != pEnd;++pIter)
2872*b1cdbd2cSJim Jagielski {
2873*b1cdbd2cSJim Jagielski if ( pIter->Name.equalsAscii("Type") )
2874*b1cdbd2cSJim Jagielski {
2875*b1cdbd2cSJim Jagielski sal_Int32 nType = 0;
2876*b1cdbd2cSJim Jagielski pIter->Value >>= nType;
2877*b1cdbd2cSJim Jagielski if ( nType < DatabaseObject::TABLE || nType > DatabaseObject::REPORT )
2878*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
2879*b1cdbd2cSJim Jagielski eType = static_cast< ElementType >( nType );
2880*b1cdbd2cSJim Jagielski }
2881*b1cdbd2cSJim Jagielski else if ( pIter->Name.equalsAscii("Selection") )
2882*b1cdbd2cSJim Jagielski pIter->Value >>= aSelection;
2883*b1cdbd2cSJim Jagielski }
2884*b1cdbd2cSJim Jagielski
2885*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.CancelCall(); // just in case the async select request was running
2886*b1cdbd2cSJim Jagielski getContainer()->selectContainer(eType);
2887*b1cdbd2cSJim Jagielski getContainer()->selectElements(aSelection);
2888*b1cdbd2cSJim Jagielski return sal_True;
2889*b1cdbd2cSJim Jagielski }
2890*b1cdbd2cSJim Jagielski // END compatibility
2891*b1cdbd2cSJim Jagielski // --------------------------------------------------------------
2892*b1cdbd2cSJim Jagielski
2893*b1cdbd2cSJim Jagielski Sequence< NamedDatabaseObject > aSelectedObjects;
2894*b1cdbd2cSJim Jagielski if ( !( _aSelection >>= aSelectedObjects ) )
2895*b1cdbd2cSJim Jagielski {
2896*b1cdbd2cSJim Jagielski aSelectedObjects.realloc( 1 );
2897*b1cdbd2cSJim Jagielski if ( !( _aSelection >>= aSelectedObjects[0] ) )
2898*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
2899*b1cdbd2cSJim Jagielski }
2900*b1cdbd2cSJim Jagielski
2901*b1cdbd2cSJim Jagielski SelectionByElementType aSelectedElements;
2902*b1cdbd2cSJim Jagielski ElementType eSelectedCategory = E_NONE;
2903*b1cdbd2cSJim Jagielski for ( const NamedDatabaseObject* pObject = aSelectedObjects.getConstArray();
2904*b1cdbd2cSJim Jagielski pObject != aSelectedObjects.getConstArray() + aSelectedObjects.getLength();
2905*b1cdbd2cSJim Jagielski ++pObject
2906*b1cdbd2cSJim Jagielski )
2907*b1cdbd2cSJim Jagielski {
2908*b1cdbd2cSJim Jagielski switch ( pObject->Type )
2909*b1cdbd2cSJim Jagielski {
2910*b1cdbd2cSJim Jagielski case DatabaseObject::TABLE:
2911*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::SCHEMA:
2912*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::CATALOG:
2913*b1cdbd2cSJim Jagielski aSelectedElements[ E_TABLE ].push_back( pObject->Name );
2914*b1cdbd2cSJim Jagielski break;
2915*b1cdbd2cSJim Jagielski case DatabaseObject::QUERY:
2916*b1cdbd2cSJim Jagielski aSelectedElements[ E_QUERY ].push_back( pObject->Name );
2917*b1cdbd2cSJim Jagielski break;
2918*b1cdbd2cSJim Jagielski case DatabaseObject::FORM:
2919*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::FORMS_FOLDER:
2920*b1cdbd2cSJim Jagielski aSelectedElements[ E_FORM ].push_back( pObject->Name );
2921*b1cdbd2cSJim Jagielski break;
2922*b1cdbd2cSJim Jagielski case DatabaseObject::REPORT:
2923*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::REPORTS_FOLDER:
2924*b1cdbd2cSJim Jagielski aSelectedElements[ E_REPORT ].push_back( pObject->Name );
2925*b1cdbd2cSJim Jagielski break;
2926*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::TABLES:
2927*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::QUERIES:
2928*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::FORMS:
2929*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::REPORTS:
2930*b1cdbd2cSJim Jagielski if ( eSelectedCategory != E_NONE )
2931*b1cdbd2cSJim Jagielski throw IllegalArgumentException(
2932*b1cdbd2cSJim Jagielski String(ModuleRes(RID_STR_NO_DIFF_CAT)),
2933*b1cdbd2cSJim Jagielski *this, sal_Int16( pObject - aSelectedObjects.getConstArray() ) );
2934*b1cdbd2cSJim Jagielski eSelectedCategory =
2935*b1cdbd2cSJim Jagielski ( pObject->Type == DatabaseObjectContainer::TABLES ) ? E_TABLE
2936*b1cdbd2cSJim Jagielski : ( pObject->Type == DatabaseObjectContainer::QUERIES ) ? E_QUERY
2937*b1cdbd2cSJim Jagielski : ( pObject->Type == DatabaseObjectContainer::FORMS ) ? E_FORM
2938*b1cdbd2cSJim Jagielski : ( pObject->Type == DatabaseObjectContainer::REPORTS ) ? E_REPORT
2939*b1cdbd2cSJim Jagielski : E_NONE;
2940*b1cdbd2cSJim Jagielski break;
2941*b1cdbd2cSJim Jagielski
2942*b1cdbd2cSJim Jagielski default:
2943*b1cdbd2cSJim Jagielski case DatabaseObjectContainer::DATA_SOURCE:
2944*b1cdbd2cSJim Jagielski {
2945*b1cdbd2cSJim Jagielski ::rtl::OUString sMessage = String(ModuleRes( RID_STR_UNSUPPORTED_OBJECT_TYPE ));
2946*b1cdbd2cSJim Jagielski ::comphelper::string::searchAndReplaceAsciiI( sMessage, "$type$", ::rtl::OUString::valueOf(sal_Int32( pObject->Type )) );
2947*b1cdbd2cSJim Jagielski throw IllegalArgumentException(sMessage, *this, sal_Int16( pObject - aSelectedObjects.getConstArray() ));
2948*b1cdbd2cSJim Jagielski }
2949*b1cdbd2cSJim Jagielski }
2950*b1cdbd2cSJim Jagielski }
2951*b1cdbd2cSJim Jagielski
2952*b1cdbd2cSJim Jagielski for ( SelectionByElementType::const_iterator sel = aSelectedElements.begin();
2953*b1cdbd2cSJim Jagielski sel != aSelectedElements.end();
2954*b1cdbd2cSJim Jagielski ++sel
2955*b1cdbd2cSJim Jagielski )
2956*b1cdbd2cSJim Jagielski {
2957*b1cdbd2cSJim Jagielski if ( sel->first == m_eCurrentType )
2958*b1cdbd2cSJim Jagielski {
2959*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aSelected( sel->second.size() );
2960*b1cdbd2cSJim Jagielski ::std::copy( sel->second.begin(), sel->second.end(), aSelected.getArray() );
2961*b1cdbd2cSJim Jagielski getContainer()->selectElements( aSelected );
2962*b1cdbd2cSJim Jagielski }
2963*b1cdbd2cSJim Jagielski else
2964*b1cdbd2cSJim Jagielski {
2965*b1cdbd2cSJim Jagielski m_aPendingSelection[ sel->first ] = sel->second;
2966*b1cdbd2cSJim Jagielski }
2967*b1cdbd2cSJim Jagielski }
2968*b1cdbd2cSJim Jagielski
2969*b1cdbd2cSJim Jagielski m_aSelectContainerEvent.CancelCall(); // just in case the async select request was running
2970*b1cdbd2cSJim Jagielski getContainer()->selectContainer( eSelectedCategory );
2971*b1cdbd2cSJim Jagielski
2972*b1cdbd2cSJim Jagielski return sal_True;
2973*b1cdbd2cSJim Jagielski }
2974*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
getSelection()2975*b1cdbd2cSJim Jagielski Any SAL_CALL OApplicationController::getSelection( ) throw (RuntimeException)
2976*b1cdbd2cSJim Jagielski {
2977*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
2978*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( getMutex() );
2979*b1cdbd2cSJim Jagielski
2980*b1cdbd2cSJim Jagielski Sequence< NamedDatabaseObject > aCurrentSelection;
2981*b1cdbd2cSJim Jagielski const ElementType eType( getContainer()->getElementType() );
2982*b1cdbd2cSJim Jagielski if ( eType != E_NONE )
2983*b1cdbd2cSJim Jagielski {
2984*b1cdbd2cSJim Jagielski getContainer()->describeCurrentSelectionForType( eType, aCurrentSelection );
2985*b1cdbd2cSJim Jagielski if ( aCurrentSelection.getLength() == 0 )
2986*b1cdbd2cSJim Jagielski { // if no objects are selected, add an entry to the sequence which describes the overall category
2987*b1cdbd2cSJim Jagielski // which is selected currently
2988*b1cdbd2cSJim Jagielski aCurrentSelection.realloc(1);
2989*b1cdbd2cSJim Jagielski aCurrentSelection[0].Name = getDatabaseName();
2990*b1cdbd2cSJim Jagielski switch ( eType )
2991*b1cdbd2cSJim Jagielski {
2992*b1cdbd2cSJim Jagielski case E_TABLE: aCurrentSelection[0].Type = DatabaseObjectContainer::TABLES; break;
2993*b1cdbd2cSJim Jagielski case E_QUERY: aCurrentSelection[0].Type = DatabaseObjectContainer::QUERIES; break;
2994*b1cdbd2cSJim Jagielski case E_FORM: aCurrentSelection[0].Type = DatabaseObjectContainer::FORMS; break;
2995*b1cdbd2cSJim Jagielski case E_REPORT: aCurrentSelection[0].Type = DatabaseObjectContainer::REPORTS; break;
2996*b1cdbd2cSJim Jagielski default:
2997*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "OApplicationController::getSelection: unexpected current element type!" );
2998*b1cdbd2cSJim Jagielski break;
2999*b1cdbd2cSJim Jagielski }
3000*b1cdbd2cSJim Jagielski }
3001*b1cdbd2cSJim Jagielski }
3002*b1cdbd2cSJim Jagielski return makeAny( aCurrentSelection );
3003*b1cdbd2cSJim Jagielski }
3004*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
impl_migrateScripts_nothrow()3005*b1cdbd2cSJim Jagielski void OApplicationController::impl_migrateScripts_nothrow()
3006*b1cdbd2cSJim Jagielski {
3007*b1cdbd2cSJim Jagielski try
3008*b1cdbd2cSJim Jagielski {
3009*b1cdbd2cSJim Jagielski ::rtl::OUString sDialogService( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.application.MacroMigrationWizard" ) );
3010*b1cdbd2cSJim Jagielski ::comphelper::ComponentContext aContext( getORB() );
3011*b1cdbd2cSJim Jagielski Sequence< Any > aDialogArgs(1);
3012*b1cdbd2cSJim Jagielski aDialogArgs[0] <<= Reference< XOfficeDatabaseDocument >( m_xModel, UNO_QUERY_THROW );
3013*b1cdbd2cSJim Jagielski Reference< XExecutableDialog > xDialog(
3014*b1cdbd2cSJim Jagielski aContext.createComponentWithArguments( sDialogService, aDialogArgs ),
3015*b1cdbd2cSJim Jagielski UNO_QUERY );
3016*b1cdbd2cSJim Jagielski
3017*b1cdbd2cSJim Jagielski if ( !xDialog.is() )
3018*b1cdbd2cSJim Jagielski {
3019*b1cdbd2cSJim Jagielski ShowServiceNotAvailableError( getView(), sDialogService, true );
3020*b1cdbd2cSJim Jagielski return;
3021*b1cdbd2cSJim Jagielski }
3022*b1cdbd2cSJim Jagielski
3023*b1cdbd2cSJim Jagielski xDialog->execute();
3024*b1cdbd2cSJim Jagielski }
3025*b1cdbd2cSJim Jagielski catch( const Exception& )
3026*b1cdbd2cSJim Jagielski {
3027*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
3028*b1cdbd2cSJim Jagielski }
3029*b1cdbd2cSJim Jagielski }
3030*b1cdbd2cSJim Jagielski
3031*b1cdbd2cSJim Jagielski //........................................................................
3032*b1cdbd2cSJim Jagielski } // namespace dbaui
3033*b1cdbd2cSJim Jagielski //........................................................................
3034*b1cdbd2cSJim Jagielski
3035