1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbaccess.hxx"
26 #ifndef _SFXSIDS_HRC
27 #include <sfx2/sfxsids.hrc>
28 #endif
29 #ifndef _DBU_QRY_HRC_
30 #include "dbu_qry.hrc"
31 #endif
32 #ifndef DBACCESS_UI_BROWSER_ID_HXX
33 #include "browserids.hxx"
34 #endif
35 #ifndef _COMPHELPER_TYPES_HXX_
36 #include <comphelper/types.hxx>
37 #endif
38 #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
39 #include "dbustrings.hrc"
40 #endif
41 #ifndef _CONNECTIVITY_DBTOOLS_HXX_
42 #include <connectivity/dbtools.hxx>
43 #endif
44 #ifndef _COM_SUN_STAR_FRAME_FRAMESEARCHFLAG_HPP_
45 #include <com/sun/star/frame/FrameSearchFlag.hpp>
46 #endif
47 #ifndef _COMPHELPER_EXTRACT_HXX_
48 #include <comphelper/extract.hxx>
49 #endif
50 #ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_
51 #include <com/sun/star/container/XChild.hpp>
52 #endif
53 #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_
54 #include <com/sun/star/container/XNameContainer.hpp>
55 #endif
56 #ifndef _COM_SUN_STAR_SDBCX_XDATADESCRIPTORFACTORY_HPP_
57 #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
58 #endif
59 #ifndef _COM_SUN_STAR_SDBCX_XTABLESSUPPLIER_HPP_
60 #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
61 #endif
62 #ifndef _COM_SUN_STAR_SDBCX_KEYTYPE_HPP_
63 #include <com/sun/star/sdbcx/KeyType.hpp>
64 #endif
65 #ifndef _COM_SUN_STAR_SDBCX_XDROP_HPP_
66 #include <com/sun/star/sdbcx/XDrop.hpp>
67 #endif
68 #ifndef _COM_SUN_STAR_SDBCX_XALTERTABLE_HPP_
69 #include <com/sun/star/sdbcx/XAlterTable.hpp>
70 #endif
71 #ifndef _COM_SUN_STAR_SDBCX_XAPPEND_HPP_
72 #include <com/sun/star/sdbcx/XAppend.hpp>
73 #endif
74 #ifndef _COM_SUN_STAR_SDB_SQLCONTEXT_HPP_
75 #include <com/sun/star/sdb/SQLContext.hpp>
76 #endif
77 #ifndef _COM_SUN_STAR_SDBC_SQLWARNING_HPP_
78 #include <com/sun/star/sdbc/SQLWarning.hpp>
79 #endif
80 #ifndef _COM_SUN_STAR_SDBC_COLUMNVALUE_HPP_
81 #include <com/sun/star/sdbc/ColumnValue.hpp>
82 #endif
83 #ifndef _COM_SUN_STAR_SDBC_XROW_HPP_
84 #include <com/sun/star/sdbc/XRow.hpp>
85 #endif
86 #ifndef _DBHELPER_DBEXCEPTION_HXX_
87 #include <connectivity/dbexception.hxx>
88 #endif
89 #ifndef _COM_SUN_STAR_UI_DIALOGS_XEXECUTABLEDIALOG_HPP_
90 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
91 #endif
92 #ifndef _COMPHELPER_STREAMSECTION_HXX_
93 #include <comphelper/streamsection.hxx>
94 #endif
95 #ifndef _COMPHELPER_BASIC_IO_HXX_
96 #include <comphelper/basicio.hxx>
97 #endif
98 #ifndef _COMPHELPER_SEQSTREAM_HXX
99 #include <comphelper/seqstream.hxx>
100 #endif
101 #ifndef _COM_SUN_STAR_IO_XACTIVEDATASOURCE_HPP_
102 #include <com/sun/star/io/XActiveDataSource.hpp>
103 #endif
104 #ifndef _COM_SUN_STAR_IO_XACTIVEDATASINK_HPP_
105 #include <com/sun/star/io/XActiveDataSink.hpp>
106 #endif
107 #ifndef _DBAUI_SQLMESSAGE_HXX_
108 #include "sqlmessage.hxx"
109 #endif
110 #ifndef DBAUI_JOINCONTROLLER_HXX
111 #include "JoinController.hxx"
112 #endif
113 #ifndef _SV_MSGBOX_HXX
114 #include <vcl/msgbox.hxx>
115 #endif
116 #ifndef DBAUI_TABLEWINDOWDATA_HXX
117 #include "TableWindowData.hxx"
118 #endif
119 #ifndef DBAUI_TABLEWINDOW_HXX
120 #include "TableWindow.hxx"
121 #endif
122 #ifndef DBAUI_TABLECONNECTIONDATA_HXX
123 #include "TableConnectionData.hxx"
124 #endif
125 #ifndef DBAUI_QYDLGTAB_HXX
126 #include "adtabdlg.hxx"
127 #endif
128 #ifndef _SV_WAITOBJ_HXX
129 #include <vcl/waitobj.hxx>
130 #endif
131 #ifndef _SV_SVAPP_HXX
132 #include <vcl/svapp.hxx>
133 #endif
134 #ifndef _VOS_MUTEX_HXX_
135 #include <vos/mutex.hxx>
136 #endif
137 #ifndef DBAUI_TOOLS_HXX
138 #include "UITools.hxx"
139 #endif
140
141 #include <boost/optional.hpp>
142
143 using namespace ::com::sun::star::uno;
144 using namespace ::com::sun::star::io;
145 using namespace ::com::sun::star::beans;
146 using namespace ::com::sun::star::frame;
147 using namespace ::com::sun::star::util;
148 using namespace ::com::sun::star::lang;
149 using namespace ::com::sun::star::container;
150 using namespace ::com::sun::star::sdbcx;
151 using namespace ::com::sun::star::sdbc;
152 using namespace ::com::sun::star::sdb;
153 using namespace ::com::sun::star::ui::dialogs;
154 using namespace ::dbtools;
155 using namespace ::comphelper;
156
157 // .............................................................................
158 namespace dbaui
159 {
160 // .............................................................................
161
162 // =============================================================================
163 // = AddTableDialogContext
164 // =============================================================================
165 class AddTableDialogContext : public IAddTableDialogContext
166 {
167 OJoinController& m_rController;
168
169 public:
AddTableDialogContext(OJoinController & _rController)170 AddTableDialogContext( OJoinController& _rController )
171 :m_rController( _rController )
172 {
173 }
174
175 // IAddTableDialogContext
176 virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >
177 getConnection() const;
178 virtual bool allowViews() const;
179 virtual bool allowQueries() const;
180 virtual bool allowAddition() const;
181 virtual void addTableWindow( const String& _rQualifiedTableName, const String& _rAliasName );
182 virtual void onWindowClosing( const Window* _pWindow );
183
184 private:
185 OJoinTableView* getTableView() const;
186 };
187
188 // -----------------------------------------------------------------------------
getConnection() const189 Reference< XConnection > AddTableDialogContext::getConnection() const
190 {
191 return m_rController.getConnection();
192 }
193
194 // -----------------------------------------------------------------------------
allowViews() const195 bool AddTableDialogContext::allowViews() const
196 {
197 return m_rController.allowViews();
198 }
199
200 // -----------------------------------------------------------------------------
allowQueries() const201 bool AddTableDialogContext::allowQueries() const
202 {
203 return m_rController.allowQueries();
204 }
205
206 // -----------------------------------------------------------------------------
allowAddition() const207 bool AddTableDialogContext::allowAddition() const
208 {
209 return const_cast< OJoinController& >( m_rController ).getJoinView()->getTableView()->IsAddAllowed();
210 }
211
212 // -----------------------------------------------------------------------------
addTableWindow(const String & _rQualifiedTableName,const String & _rAliasName)213 void AddTableDialogContext::addTableWindow( const String& _rQualifiedTableName, const String& _rAliasName )
214 {
215 getTableView()->AddTabWin( _rQualifiedTableName, _rAliasName, sal_True );
216 }
217
218 // -----------------------------------------------------------------------------
onWindowClosing(const Window * _pWindow)219 void AddTableDialogContext::onWindowClosing( const Window* _pWindow )
220 {
221 if ( !m_rController.getView() )
222 return;
223
224 ::dbaui::notifySystemWindow(
225 m_rController.getView(), const_cast< Window* >( _pWindow ), ::comphelper::mem_fun( &TaskPaneList::RemoveWindow ) );
226
227 m_rController.InvalidateFeature( ID_BROWSER_ADDTABLE );
228 m_rController.getView()->GrabFocus();
229 }
230
231 // -----------------------------------------------------------------------------
getTableView() const232 OJoinTableView* AddTableDialogContext::getTableView() const
233 {
234 if ( m_rController.getJoinView() )
235 return m_rController.getJoinView()->getTableView();
236 return NULL;
237 }
238
239 // =============================================================================
240 // = OJoinController
241 // =============================================================================
242
DBG_NAME(OJoinController)243 DBG_NAME(OJoinController)
244 // -----------------------------------------------------------------------------
245 OJoinController::OJoinController(const Reference< XMultiServiceFactory >& _rM)
246 :OJoinController_BASE(_rM)
247 ,m_pAddTableDialog(NULL)
248 {
249 DBG_CTOR(OJoinController,NULL);
250 }
251 // -----------------------------------------------------------------------------
~OJoinController()252 OJoinController::~OJoinController()
253 {
254 DBG_DTOR(OJoinController,NULL);
255 }
256
257 // -----------------------------------------------------------------------------
disposing(const EventObject & _rSource)258 void SAL_CALL OJoinController::disposing( const EventObject& _rSource ) throw(RuntimeException)
259 {
260 OJoinController_BASE::disposing( _rSource );
261 }
262
263 // -----------------------------------------------------------------------------
getJoinView()264 OJoinDesignView* OJoinController::getJoinView()
265 {
266 return static_cast< OJoinDesignView* >( getView() );
267 }
268
269 // -----------------------------------------------------------------------------
disposing()270 void OJoinController::disposing()
271 {
272 {
273 ::std::auto_ptr< Window > pEnsureDelete( m_pAddTableDialog );
274 m_pAddTableDialog = NULL;
275 }
276
277 OJoinController_BASE::disposing();
278
279 clearView();
280
281 m_vTableConnectionData.clear();
282 m_vTableData.clear();
283 }
284 // -----------------------------------------------------------------------------
reconnect(sal_Bool _bUI)285 void OJoinController::reconnect( sal_Bool _bUI )
286 {
287 OJoinController_BASE::reconnect( _bUI );
288 if ( isConnected() && m_pAddTableDialog )
289 m_pAddTableDialog->Update();
290 }
291
292 // -----------------------------------------------------------------------------
impl_onModifyChanged()293 void OJoinController::impl_onModifyChanged()
294 {
295 OJoinController_BASE::impl_onModifyChanged();
296 InvalidateFeature( SID_RELATION_ADD_RELATION );
297 }
298 // -----------------------------------------------------------------------------
SaveTabWinPosSize(OTableWindow * pTabWin,long nOffsetX,long nOffsetY)299 void OJoinController::SaveTabWinPosSize(OTableWindow* pTabWin, long nOffsetX, long nOffsetY)
300 {
301 // die Daten zum Fenster
302 TTableWindowData::value_type pData = pTabWin->GetData();
303 OSL_ENSURE( bool(pData), "SaveTabWinPosSize : TabWin hat keine Daten !");
304
305 // Position & Size der Daten neu setzen (aus den aktuellen Fenster-Parametern)
306 Point aPos = pTabWin->GetPosPixel();
307 aPos.X() += nOffsetX;
308 aPos.Y() += nOffsetY;
309 pData->SetPosition(aPos);
310 pData->SetSize(pTabWin->GetSizePixel());
311
312 }
313 // -----------------------------------------------------------------------------
GetState(sal_uInt16 _nId) const314 FeatureState OJoinController::GetState(sal_uInt16 _nId) const
315 {
316 FeatureState aReturn;
317 // (disabled automatically)
318 aReturn.bEnabled = sal_True;
319
320 switch (_nId)
321 {
322 case ID_BROWSER_EDITDOC:
323 aReturn.bChecked = isEditable();
324 break;
325 case ID_BROWSER_ADDTABLE:
326 aReturn.bEnabled = ( getView() != NULL )
327 && const_cast< OJoinController* >( this )->getJoinView()->getTableView()->IsAddAllowed();
328 aReturn.bChecked = aReturn.bEnabled && m_pAddTableDialog != NULL && m_pAddTableDialog->IsVisible() ;
329 if ( aReturn.bEnabled )
330 aReturn.sTitle = OAddTableDlg::getDialogTitleForContext( impl_getDialogContext() );
331 break;
332
333 default:
334 aReturn = OJoinController_BASE::GetState(_nId);
335 }
336 return aReturn;
337 }
338
339 // -----------------------------------------------------------------------------
impl_getDialogContext() const340 AddTableDialogContext& OJoinController::impl_getDialogContext() const
341 {
342 if ( !m_pDialogContext.get() )
343 {
344 OJoinController* pNonConstThis = const_cast< OJoinController* >( this );
345 pNonConstThis->m_pDialogContext.reset( new AddTableDialogContext( *pNonConstThis ) );
346 }
347 return *m_pDialogContext;
348 }
349
350 // -----------------------------------------------------------------------------
Execute(sal_uInt16 _nId,const Sequence<PropertyValue> & aArgs)351 void OJoinController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue >& aArgs)
352 {
353 switch(_nId)
354 {
355 case ID_BROWSER_EDITDOC:
356 if(isEditable())
357 { // the state should be changed to not editable
358 switch (saveModified())
359 {
360 case RET_CANCEL:
361 // don't change anything here so return
362 return;
363 case RET_NO:
364 reset();
365 setModified(sal_False); // and we are not modified yet
366 break;
367 default:
368 break;
369 }
370 }
371 setEditable(!isEditable());
372 getJoinView()->setReadOnly(!isEditable());
373 InvalidateAll();
374 return;
375 case ID_BROWSER_ADDTABLE:
376 if ( !m_pAddTableDialog )
377 m_pAddTableDialog = new OAddTableDlg( getView(), impl_getDialogContext() );
378
379 if ( m_pAddTableDialog->IsVisible() )
380 {
381 m_pAddTableDialog->Show( sal_False );
382 getView()->GrabFocus();
383 }
384 else
385 {
386 {
387 WaitObject aWaitCursor( getView() );
388 m_pAddTableDialog->Update();
389 }
390 m_pAddTableDialog->Show( sal_True );
391 ::dbaui::notifySystemWindow(getView(),m_pAddTableDialog,::comphelper::mem_fun(&TaskPaneList::AddWindow));
392 }
393 break;
394 default:
395 OJoinController_BASE::Execute(_nId,aArgs);
396 }
397 InvalidateFeature(_nId);
398 }
399 // -----------------------------------------------------------------------------
SaveTabWinsPosSize(OJoinTableView::OTableWindowMap * pTabWinList,long nOffsetX,long nOffsetY)400 void OJoinController::SaveTabWinsPosSize( OJoinTableView::OTableWindowMap* pTabWinList, long nOffsetX, long nOffsetY )
401 {
402 // Das Loeschen und Neuanlegen der alten Implementation ist unter dem aktuellen Modell nicht mehr richtig : Die TabWins
403 // habe einen Zeiger auf ihre Daten, verwaltet werden sie aber von mir. Wenn ich die alten loesche, haben die TabWins
404 // ploetzlich Zeiger auf nicht mehr existente Objekte.
405 // Wenn die TabWins ein SetData haetten, koennte ich mir das sparen ... haben sie aber nicht, ausserdem muesste ich dann immer
406 // noch Informationen, die sich eigentlich nicht geaendert haben, auch neu setzen.
407 // Also loesche ich die TabWinDatas nicht, sondern aktualisiere sie nur.
408 DBG_ASSERT(m_vTableData.size() == pTabWinList->size(),
409 "OJoinController::SaveTabWinsPosSize : inkonsistenter Zustand : sollte genausviel TabWinDatas haben wie TabWins !");
410
411 OJoinTableView::OTableWindowMap::iterator aIter = pTabWinList->begin();
412 OJoinTableView::OTableWindowMap::iterator aEnd = pTabWinList->end();
413 for(;aIter != aEnd;++aIter)
414 SaveTabWinPosSize(aIter->second, nOffsetX, nOffsetY);
415 }
416 // -----------------------------------------------------------------------------
removeConnectionData(const TTableConnectionData::value_type & _pData)417 void OJoinController::removeConnectionData(const TTableConnectionData::value_type& _pData)
418 {
419 m_vTableConnectionData.erase( ::std::remove(m_vTableConnectionData.begin(),m_vTableConnectionData.end(),_pData),m_vTableConnectionData.end());
420 }
421 // -----------------------------------------------------------------------------
describeSupportedFeatures()422 void OJoinController::describeSupportedFeatures()
423 {
424 OJoinController_BASE::describeSupportedFeatures();
425 implDescribeSupportedFeature( ".uno:Redo", ID_BROWSER_REDO, CommandGroup::EDIT );
426 implDescribeSupportedFeature( ".uno:Save", ID_BROWSER_SAVEDOC, CommandGroup::DOCUMENT );
427 implDescribeSupportedFeature( ".uno:Undo", ID_BROWSER_UNDO, CommandGroup::EDIT );
428 implDescribeSupportedFeature( ".uno:AddTable", ID_BROWSER_ADDTABLE,CommandGroup::EDIT );
429 implDescribeSupportedFeature( ".uno:EditDoc", ID_BROWSER_EDITDOC, CommandGroup::EDIT );
430 }
431 // -----------------------------------------------------------------------------
suspend(sal_Bool _bSuspend)432 sal_Bool SAL_CALL OJoinController::suspend(sal_Bool _bSuspend) throw( RuntimeException )
433 {
434 if ( getBroadcastHelper().bInDispose || getBroadcastHelper().bDisposed )
435 return sal_True;
436
437 vos::OGuard aSolarGuard( Application::GetSolarMutex() );
438 ::osl::MutexGuard aGuard( getMutex() );
439 if ( getView() && getView()->IsInModalMode() )
440 return sal_False;
441 sal_Bool bCheck = sal_True;
442 if ( _bSuspend )
443 {
444 bCheck = saveModified() != RET_CANCEL;
445 if ( bCheck )
446 OSingleDocumentController::suspend(_bSuspend);
447 }
448 return bCheck;
449 }
450 // -----------------------------------------------------------------------------
loadTableWindows(const::comphelper::NamedValueCollection & i_rViewSettings)451 void OJoinController::loadTableWindows( const ::comphelper::NamedValueCollection& i_rViewSettings )
452 {
453 m_vTableData.clear();
454
455 m_aMinimumTableViewSize = Point();
456
457 Sequence< PropertyValue > aWindowData;
458 aWindowData = i_rViewSettings.getOrDefault( "Tables", aWindowData );
459
460 const PropertyValue* pTablesIter = aWindowData.getConstArray();
461 const PropertyValue* pTablesEnd = pTablesIter + aWindowData.getLength();
462 for ( ; pTablesIter != pTablesEnd; ++pTablesIter )
463 {
464 ::comphelper::NamedValueCollection aSingleTableData( pTablesIter->Value );
465 loadTableWindow( aSingleTableData );
466 }
467 if ( m_aMinimumTableViewSize != Point() )
468 {
469 getJoinView()->getScrollHelper()->resetRange( m_aMinimumTableViewSize );
470 }
471 }
472
473 // -----------------------------------------------------------------------------
loadTableWindow(const::comphelper::NamedValueCollection & i_rTableWindowSettings)474 void OJoinController::loadTableWindow( const ::comphelper::NamedValueCollection& i_rTableWindowSettings )
475 {
476 sal_Int32 nX = -1, nY = -1, nHeight = -1, nWidth = -1;
477
478 ::rtl::OUString sComposedName,sTableName,sWindowName;
479 sal_Bool bShowAll = false;
480
481 sComposedName = i_rTableWindowSettings.getOrDefault( "ComposedName", sComposedName );
482 sTableName = i_rTableWindowSettings.getOrDefault( "TableName", sTableName );
483 sWindowName = i_rTableWindowSettings.getOrDefault( "WindowName", sWindowName );
484 nY = i_rTableWindowSettings.getOrDefault( "WindowTop", nY );
485 nX = i_rTableWindowSettings.getOrDefault( "WindowLeft", nX );
486 nWidth = i_rTableWindowSettings.getOrDefault( "WindowWidth", nWidth );
487 nHeight = i_rTableWindowSettings.getOrDefault( "WindowHeight", nHeight );
488 bShowAll = i_rTableWindowSettings.getOrDefault( "ShowAll", bShowAll );
489
490 TTableWindowData::value_type pData = createTableWindowData(sComposedName,sTableName,sWindowName);
491 if ( pData )
492 {
493 pData->SetPosition(Point(nX,nY));
494 pData->SetSize( Size( nWidth, nHeight ) );
495 pData->ShowAll(bShowAll);
496 m_vTableData.push_back(pData);
497 if ( m_aMinimumTableViewSize.X() < (nX+nWidth) )
498 m_aMinimumTableViewSize.X() = (nX+nWidth);
499 if ( m_aMinimumTableViewSize.Y() < (nY+nHeight) )
500 m_aMinimumTableViewSize.Y() = (nY+nHeight);
501 }
502 }
503 // -----------------------------------------------------------------------------
saveTableWindows(::comphelper::NamedValueCollection & o_rViewSettings) const504 void OJoinController::saveTableWindows( ::comphelper::NamedValueCollection& o_rViewSettings ) const
505 {
506 if ( !m_vTableData.empty() )
507 {
508 ::comphelper::NamedValueCollection aAllTablesData;
509
510 TTableWindowData::const_iterator aIter = m_vTableData.begin();
511 TTableWindowData::const_iterator aEnd = m_vTableData.end();
512 for ( sal_Int32 i = 1; aIter != aEnd; ++aIter, ++i )
513 {
514 ::comphelper::NamedValueCollection aWindowData;
515 aWindowData.put( "ComposedName", (*aIter)->GetComposedName() );
516 aWindowData.put( "TableName", (*aIter)->GetTableName() );
517 aWindowData.put( "WindowName", (*aIter)->GetWinName() );
518 aWindowData.put( "WindowTop", static_cast<sal_Int32>((*aIter)->GetPosition().Y()) );
519 aWindowData.put( "WindowLeft", static_cast<sal_Int32>((*aIter)->GetPosition().X()) );
520 aWindowData.put( "WindowWidth", static_cast<sal_Int32>((*aIter)->GetSize().Width()) );
521 aWindowData.put( "WindowHeight", static_cast<sal_Int32>((*aIter)->GetSize().Height()) );
522 aWindowData.put( "ShowAll", (*aIter)->IsShowAll() );
523
524 const ::rtl::OUString sTableName( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Table" ) ) + ::rtl::OUString::valueOf( i ) );
525 aAllTablesData.put( sTableName, aWindowData.getPropertyValues() );
526 }
527
528 o_rViewSettings.put( "Tables", aAllTablesData.getPropertyValues() );
529 }
530 }
531 // -----------------------------------------------------------------------------
createTableWindowData(const::rtl::OUString & _sComposedName,const::rtl::OUString & _sTableName,const::rtl::OUString & _sWindowName)532 TTableWindowData::value_type OJoinController::createTableWindowData(const ::rtl::OUString& _sComposedName,const ::rtl::OUString& _sTableName,const ::rtl::OUString& _sWindowName)
533 {
534 OJoinDesignView* pView = getJoinView();
535 if( pView )
536 return pView->getTableView()->createTableWindowData(_sComposedName,_sTableName,_sWindowName);
537 OSL_ENSURE(0,"We should never ever reach this point!");
538
539 return TTableWindowData::value_type();
540 }
541 // .............................................................................
542 } // namespace dbaui
543 // .............................................................................
544