xref: /trunk/main/dbaccess/source/ui/querydesign/QueryViewSwitch.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_dbaccess.hxx"
30 #ifndef DBAUI_QUERYVIEWSWITCH_HXX
31 #include "QueryViewSwitch.hxx"
32 #endif
33 #ifndef DBAUI_QUERYDESIGNVIEW_HXX
34 #include "QueryDesignView.hxx"
35 #endif
36 #ifndef DBAUI_QUERYVIEW_TEXT_HXX
37 #include "QueryTextView.hxx"
38 #endif
39 #ifndef DBAUI_QUERYCONTAINERWINDOW_HXX
40 #include "querycontainerwindow.hxx"
41 #endif
42 #ifndef _DBU_QRY_HRC_
43 #include "dbu_qry.hrc"
44 #endif
45 #ifndef DBACCESS_UI_BROWSER_ID_HXX
46 #include "browserids.hxx"
47 #endif
48 #ifndef DBAUI_QYDLGTAB_HXX
49 #include "adtabdlg.hxx"
50 #endif
51 #ifndef DBAUI_QUERYCONTROLLER_HXX
52 #include "querycontroller.hxx"
53 #endif
54 #ifndef DBAUI_SQLEDIT_HXX
55 #include "sqledit.hxx"
56 #endif
57 #ifndef DBAUI_QUERYCONTAINERWINDOW_HXX
58 #include "querycontainerwindow.hxx"
59 #endif
60 
61 using namespace dbaui;
62 using namespace ::com::sun::star::uno;
63 using namespace ::com::sun::star::lang;
64 
65 DBG_NAME(OQueryViewSwitch)
66 OQueryViewSwitch::OQueryViewSwitch(OQueryContainerWindow* _pParent, OQueryController& _rController,const Reference< XMultiServiceFactory >& _rFactory)
67 : m_bAddTableDialogWasVisible(sal_False)
68 {
69     DBG_CTOR(OQueryViewSwitch,NULL);
70 
71     m_pTextView     = new OQueryTextView(_pParent);
72     m_pDesignView   = new OQueryDesignView( _pParent, _rController, _rFactory );
73 }
74 // -----------------------------------------------------------------------------
75 OQueryViewSwitch::~OQueryViewSwitch()
76 {
77     DBG_DTOR(OQueryViewSwitch,NULL);
78     {
79         ::std::auto_ptr<Window> aTemp(m_pTextView);
80         m_pTextView = NULL;
81     }
82     {
83         ::std::auto_ptr<Window> aTemp(m_pDesignView);
84         m_pDesignView = NULL;
85     }
86 }
87 // -------------------------------------------------------------------------
88 void OQueryViewSwitch::Construct()
89 {
90     m_pDesignView->Construct( );
91 }
92 // -----------------------------------------------------------------------------
93 void OQueryViewSwitch::initialize()
94 {
95     // initially be in SQL mode
96     m_pTextView->Show();
97     m_pDesignView->initialize();
98 }
99 // -------------------------------------------------------------------------
100 void OQueryViewSwitch::resizeDocumentView(Rectangle& _rPlayground)
101 {
102     m_pTextView->SetPosSizePixel( _rPlayground.TopLeft(), _rPlayground.GetSize() );
103     m_pDesignView->SetPosSizePixel( _rPlayground.TopLeft(), _rPlayground.GetSize() );
104 
105     // just for completeness: there is no space left, we occupied it all ...
106     _rPlayground.SetPos( _rPlayground.BottomRight() );
107     _rPlayground.SetSize( Size( 0, 0 ) );
108 }
109 // -----------------------------------------------------------------------------
110 sal_Bool OQueryViewSwitch::checkStatement()
111 {
112     if(m_pTextView->IsVisible())
113         return m_pTextView->checkStatement();
114     return m_pDesignView->checkStatement();
115 }
116 // -----------------------------------------------------------------------------
117 ::rtl::OUString OQueryViewSwitch::getStatement()
118 {
119     if(m_pTextView->IsVisible())
120         return m_pTextView->getStatement();
121     return m_pDesignView->getStatement();
122 }
123 // -----------------------------------------------------------------------------
124 void OQueryViewSwitch::setReadOnly(sal_Bool _bReadOnly)
125 {
126     if(m_pTextView->IsVisible())
127         m_pTextView->setReadOnly(_bReadOnly);
128     else
129         m_pDesignView->setReadOnly(_bReadOnly);
130 }
131 // -----------------------------------------------------------------------------
132 void OQueryViewSwitch::clear()
133 {
134     if(m_pTextView->IsVisible())
135         m_pTextView->clear();
136     else
137         m_pDesignView->clear();
138 }
139 // -----------------------------------------------------------------------------
140 void OQueryViewSwitch::GrabFocus()
141 {
142     if ( m_pTextView && m_pTextView->IsVisible() )
143         m_pTextView->GrabFocus();
144     else if ( m_pDesignView && m_pDesignView->IsVisible() )
145         m_pDesignView->GrabFocus();
146 }
147 // -----------------------------------------------------------------------------
148 void OQueryViewSwitch::setStatement(const ::rtl::OUString& _rsStatement)
149 {
150     if(m_pTextView->IsVisible())
151         m_pTextView->setStatement(_rsStatement);
152     else
153         m_pDesignView->setStatement(_rsStatement);
154 }
155 // -----------------------------------------------------------------------------
156 void OQueryViewSwitch::copy()
157 {
158     if(m_pTextView->IsVisible())
159         m_pTextView->copy();
160     else
161         m_pDesignView->copy();
162 }
163 // -----------------------------------------------------------------------------
164 sal_Bool OQueryViewSwitch::isCutAllowed()
165 {
166     if(m_pTextView->IsVisible())
167         return m_pTextView->isCutAllowed();
168     return m_pDesignView->isCutAllowed();
169 }
170 // -----------------------------------------------------------------------------
171 sal_Bool OQueryViewSwitch::isCopyAllowed()
172 {
173     if(m_pTextView->IsVisible())
174         return m_pTextView->isCopyAllowed();
175     return m_pDesignView->isCopyAllowed();
176 }
177 // -----------------------------------------------------------------------------
178 sal_Bool OQueryViewSwitch::isPasteAllowed()
179 {
180     if(m_pTextView->IsVisible())
181         return m_pTextView->isPasteAllowed();
182     return m_pDesignView->isPasteAllowed();
183 }
184 // -----------------------------------------------------------------------------
185 void OQueryViewSwitch::cut()
186 {
187     if(m_pTextView->IsVisible())
188         m_pTextView->cut();
189     else
190         m_pDesignView->cut();
191 }
192 // -----------------------------------------------------------------------------
193 void OQueryViewSwitch::paste()
194 {
195     if(m_pTextView->IsVisible())
196         m_pTextView->paste();
197     else
198         m_pDesignView->paste();
199 }
200 // -----------------------------------------------------------------------------
201 OQueryContainerWindow* OQueryViewSwitch::getContainer() const
202 {
203     Window* pDesignParent = getDesignView() ? getDesignView()->GetParent() : NULL;
204     return static_cast< OQueryContainerWindow* >( pDesignParent );
205 }
206 
207 // -----------------------------------------------------------------------------
208 void OQueryViewSwitch::impl_forceSQLView()
209 {
210     OAddTableDlg* pAddTabDialog( getAddTableDialog() );
211 
212     // hide the "Add Table" dialog
213     m_bAddTableDialogWasVisible = pAddTabDialog ? pAddTabDialog->IsVisible() : false;
214     if ( m_bAddTableDialogWasVisible )
215         pAddTabDialog->Hide();
216 
217     // tell the views they're in/active
218     m_pDesignView->stopTimer();
219     m_pTextView->getSqlEdit()->startTimer();
220 
221     // set the most recent statement at the text view
222     m_pTextView->clear();
223     m_pTextView->setStatement(static_cast<OQueryController&>(m_pDesignView->getController()).getStatement());
224 }
225 
226 // -----------------------------------------------------------------------------
227 void OQueryViewSwitch::forceInitialView()
228 {
229     OQueryController& rQueryController( static_cast< OQueryController& >( m_pDesignView->getController() ) );
230     const sal_Bool bGraphicalDesign = rQueryController.isGraphicalDesign();
231     if ( !bGraphicalDesign )
232         impl_forceSQLView();
233     else
234     {
235         // tell the text view it's inactive now
236         m_pTextView->getSqlEdit()->stopTimer();
237 
238         // update the "Add Table" dialog
239         OAddTableDlg* pAddTabDialog( getAddTableDialog() );
240         if ( pAddTabDialog )
241             pAddTabDialog->Update();
242 
243         // initialize the design view
244         m_pDesignView->initByFieldDescriptions( rQueryController.getFieldInformation() );
245 
246         // tell the design view it's active now
247         m_pDesignView->startTimer();
248     }
249 
250     impl_postViewSwitch( bGraphicalDesign, true );
251 }
252 
253 // -----------------------------------------------------------------------------
254 bool OQueryViewSwitch::switchView( ::dbtools::SQLExceptionInfo* _pErrorInfo )
255 {
256     sal_Bool bRet = sal_True;
257     sal_Bool bGraphicalDesign = static_cast<OQueryController&>(m_pDesignView->getController()).isGraphicalDesign();
258 
259     if ( !bGraphicalDesign )
260     {
261         impl_forceSQLView();
262     }
263     else
264     {
265         // tell the text view it's inactive now
266         m_pTextView->getSqlEdit()->stopTimer();
267 
268         // update the "Add Table" dialog
269         OAddTableDlg* pAddTabDialog( getAddTableDialog() );
270         if ( pAddTabDialog )
271             pAddTabDialog->Update();
272 
273         // initialize the design view
274         bRet = m_pDesignView->initByParseIterator( _pErrorInfo );
275 
276         // tell the design view it's active now
277         m_pDesignView->startTimer();
278     }
279 
280     return impl_postViewSwitch( bGraphicalDesign, bRet );
281 }
282 
283 // -----------------------------------------------------------------------------
284 bool OQueryViewSwitch::impl_postViewSwitch( const bool i_bGraphicalDesign, const bool i_bSuccess )
285 {
286     if ( i_bSuccess )
287     {
288         m_pTextView->Show   ( !i_bGraphicalDesign );
289         m_pDesignView->Show ( i_bGraphicalDesign );
290         OAddTableDlg* pAddTabDialog( getAddTableDialog() );
291         if ( pAddTabDialog )
292             if ( i_bGraphicalDesign && m_bAddTableDialogWasVisible )
293                 pAddTabDialog->Show();
294 
295         GrabFocus();
296     }
297 
298     OQueryContainerWindow* pContainer = getContainer();
299     if ( pContainer )
300         pContainer->Resize();
301 
302     m_pDesignView->getController().ClearUndoManager();
303     m_pDesignView->getController().InvalidateAll();
304 
305     return i_bSuccess;
306 }
307 
308 // -----------------------------------------------------------------------------
309 OAddTableDlg* OQueryViewSwitch::getAddTableDialog()
310 {
311     if ( !m_pDesignView )
312         return NULL;
313     return m_pDesignView->getController().getAddTableDialog();
314 }
315 // -----------------------------------------------------------------------------
316 sal_Bool OQueryViewSwitch::isSlotEnabled(sal_Int32 _nSlotId)
317 {
318     return m_pDesignView->isSlotEnabled(_nSlotId);
319 }
320 // -----------------------------------------------------------------------------
321 void OQueryViewSwitch::setSlotEnabled(sal_Int32 _nSlotId,sal_Bool _bEnable)
322 {
323     m_pDesignView->setSlotEnabled(_nSlotId,_bEnable);
324 }
325 // -----------------------------------------------------------------------------
326 void OQueryViewSwitch::SaveUIConfig()
327 {
328     if(m_pDesignView->IsVisible())
329         m_pDesignView->SaveUIConfig();
330 }
331 // -----------------------------------------------------------------------------
332 void OQueryViewSwitch::SetPosSizePixel( Point _rPt,Size _rSize)
333 {
334     m_pDesignView->SetPosSizePixel( _rPt,_rSize);
335     m_pDesignView->Resize();
336     m_pTextView->SetPosSizePixel( _rPt,_rSize);
337 }
338 // -----------------------------------------------------------------------------
339 Reference< XMultiServiceFactory > OQueryViewSwitch::getORB() const
340 {
341     return m_pDesignView->getORB();
342 }
343 // -----------------------------------------------------------------------------
344 bool OQueryViewSwitch::reset( ::dbtools::SQLExceptionInfo* _pErrorInfo )
345 {
346     m_pDesignView->reset();
347     if ( !m_pDesignView->initByParseIterator( _pErrorInfo ) )
348         return false;
349 
350     if ( switchView( _pErrorInfo ) )
351         return false;
352 
353     return true;
354 }
355 // -----------------------------------------------------------------------------
356 void OQueryViewSwitch::setNoneVisbleRow(sal_Int32 _nRows)
357 {
358     if(m_pDesignView)
359         m_pDesignView->setNoneVisbleRow(_nRows);
360 }
361 // -----------------------------------------------------------------------------
362