1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_dbaccess.hxx" 30*cdf0e10cSrcweir #ifndef DBAUI_QUERYTABLEVIEW_HXX 31*cdf0e10cSrcweir #include "JoinTableView.hxx" 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX 34*cdf0e10cSrcweir #include <tools/debug.hxx> 35*cdf0e10cSrcweir #endif 36*cdf0e10cSrcweir #ifndef DBAUI_QUERYCONTROLLER_HXX 37*cdf0e10cSrcweir #include "querycontroller.hxx" 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #ifndef DBAUI_JOINDESIGNVIEW_HXX 40*cdf0e10cSrcweir #include "JoinDesignView.hxx" 41*cdf0e10cSrcweir #endif 42*cdf0e10cSrcweir #ifndef _DBU_QRY_HRC_ 43*cdf0e10cSrcweir #include "dbu_qry.hrc" 44*cdf0e10cSrcweir #endif 45*cdf0e10cSrcweir #ifndef DBAUI_TABLEWINDOW_HXX 46*cdf0e10cSrcweir #include "TableWindow.hxx" 47*cdf0e10cSrcweir #endif 48*cdf0e10cSrcweir //#ifndef DBAUI_QUERY_TABLEWINDOWDATA_HXX 49*cdf0e10cSrcweir //#include "QTableWindowData.hxx" 50*cdf0e10cSrcweir //#endif 51*cdf0e10cSrcweir #ifndef DBAUI_TABLEWINDOWLISTBOX_HXX 52*cdf0e10cSrcweir #include "TableWindowListBox.hxx" 53*cdf0e10cSrcweir #endif 54*cdf0e10cSrcweir #ifndef DBAUI_TABLECONNECTION_HXX 55*cdf0e10cSrcweir #include "TableConnection.hxx" 56*cdf0e10cSrcweir #endif 57*cdf0e10cSrcweir #ifndef DBAUI_TABLECONNECTIONDATA_HXX 58*cdf0e10cSrcweir #include "TableConnectionData.hxx" 59*cdf0e10cSrcweir #endif 60*cdf0e10cSrcweir #ifndef DBAUI_CONNECTIONLINE_HXX 61*cdf0e10cSrcweir #include "ConnectionLine.hxx" 62*cdf0e10cSrcweir #endif 63*cdf0e10cSrcweir #ifndef DBAUI_CONNECTIONLINEDATA_HXX 64*cdf0e10cSrcweir #include "ConnectionLineData.hxx" 65*cdf0e10cSrcweir #endif 66*cdf0e10cSrcweir #ifndef DBACCESS_UI_BROWSER_ID_HXX 67*cdf0e10cSrcweir #include "browserids.hxx" 68*cdf0e10cSrcweir #endif 69*cdf0e10cSrcweir #ifndef _URLBMK_HXX 70*cdf0e10cSrcweir #include <svl/urlbmk.hxx> 71*cdf0e10cSrcweir #endif 72*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_ 73*cdf0e10cSrcweir #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> 74*cdf0e10cSrcweir #endif 75*cdf0e10cSrcweir #ifndef DBAUI_OQUERYMOVETABWINUNDOACT_HXX 76*cdf0e10cSrcweir #include "QueryMoveTabWinUndoAct.hxx" 77*cdf0e10cSrcweir #endif 78*cdf0e10cSrcweir #ifndef DBAUI_QUERYSIZETABWINUNDOACT_HXX 79*cdf0e10cSrcweir #include "QuerySizeTabWinUndoAct.hxx" 80*cdf0e10cSrcweir #endif 81*cdf0e10cSrcweir #ifndef _SV_SVAPP_HXX 82*cdf0e10cSrcweir #include <vcl/svapp.hxx> 83*cdf0e10cSrcweir #endif 84*cdf0e10cSrcweir #ifndef DBAUI_TABLEWINDOWDATA_HXX 85*cdf0e10cSrcweir #include "TableWindowData.hxx" 86*cdf0e10cSrcweir #endif 87*cdf0e10cSrcweir #ifndef DBACCESS_JACCESS_HXX 88*cdf0e10cSrcweir #include "JAccess.hxx" 89*cdf0e10cSrcweir #endif 90*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_ 91*cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessible.hpp> 92*cdf0e10cSrcweir #endif 93*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ 94*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp> 95*cdf0e10cSrcweir #endif 96*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp> 97*cdf0e10cSrcweir #ifndef DBAUI_TOOLS_HXX 98*cdf0e10cSrcweir #include "UITools.hxx" 99*cdf0e10cSrcweir #endif 100*cdf0e10cSrcweir #include <cppuhelper/exc_hlp.hxx> 101*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 102*cdf0e10cSrcweir #include <boost/bind.hpp> 103*cdf0e10cSrcweir #include <algorithm> 104*cdf0e10cSrcweir #include <functional> 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir using namespace dbaui; 107*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 108*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 109*cdf0e10cSrcweir using namespace ::com::sun::star::accessibility; 110*cdf0e10cSrcweir using namespace ::com::sun::star::container; 111*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir #define LINE_SIZE 50 114*cdf0e10cSrcweir //////////////////////////////////////////////////////////////// 115*cdf0e10cSrcweir // Konstanten fuer das Fensterlayout 116*cdf0e10cSrcweir #define TABWIN_SPACING_X 17 117*cdf0e10cSrcweir #define TABWIN_SPACING_Y 17 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir #define TABWIN_WIDTH_STD 120 120*cdf0e10cSrcweir #define TABWIN_HEIGHT_STD 120 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir DBG_NAME(OScrollWindowHelper) 123*cdf0e10cSrcweir OScrollWindowHelper::OScrollWindowHelper( Window* pParent) : Window( pParent) 124*cdf0e10cSrcweir ,m_aHScrollBar( this, WB_HSCROLL|WB_REPEAT|WB_DRAG ) 125*cdf0e10cSrcweir ,m_aVScrollBar( this, WB_VSCROLL|WB_REPEAT|WB_DRAG ) 126*cdf0e10cSrcweir ,m_pCornerWindow(new ScrollBarBox(this, WB_3DLOOK)) 127*cdf0e10cSrcweir ,m_pTableView(NULL) 128*cdf0e10cSrcweir { 129*cdf0e10cSrcweir DBG_CTOR(OScrollWindowHelper,NULL); 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 132*cdf0e10cSrcweir // ScrollBars 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir GetHScrollBar()->SetRange( Range(0, 1000) ); 135*cdf0e10cSrcweir GetVScrollBar()->SetRange( Range(0, 1000) ); 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir GetHScrollBar()->SetLineSize( LINE_SIZE ); 138*cdf0e10cSrcweir GetVScrollBar()->SetLineSize( LINE_SIZE ); 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir GetHScrollBar()->Show(); 141*cdf0e10cSrcweir GetVScrollBar()->Show(); 142*cdf0e10cSrcweir m_pCornerWindow->Show(); 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir // normally we should be SCROLL_PANE 145*cdf0e10cSrcweir SetAccessibleRole(AccessibleRole::SCROLL_PANE); 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 149*cdf0e10cSrcweir OScrollWindowHelper::~OScrollWindowHelper() 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir DBG_DTOR(OScrollWindowHelper,NULL); 152*cdf0e10cSrcweir ::std::auto_ptr<Window> aTemp(m_pCornerWindow); 153*cdf0e10cSrcweir m_pCornerWindow = NULL; 154*cdf0e10cSrcweir m_pTableView = NULL; 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 158*cdf0e10cSrcweir void OScrollWindowHelper::setTableView(OJoinTableView* _pTableView) 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir m_pTableView = _pTableView; 161*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 162*cdf0e10cSrcweir // ScrollBars 163*cdf0e10cSrcweir GetHScrollBar()->SetScrollHdl( LINK(m_pTableView, OJoinTableView, ScrollHdl) ); 164*cdf0e10cSrcweir GetVScrollBar()->SetScrollHdl( LINK(m_pTableView, OJoinTableView, ScrollHdl) ); 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 167*cdf0e10cSrcweir void OScrollWindowHelper::resetRange(const Point& _aSize) 168*cdf0e10cSrcweir { 169*cdf0e10cSrcweir Point aPos = PixelToLogic(_aSize); 170*cdf0e10cSrcweir GetHScrollBar()->SetRange( Range(0, aPos.X() + TABWIN_SPACING_X) ); 171*cdf0e10cSrcweir GetVScrollBar()->SetRange( Range(0, aPos.Y() + TABWIN_SPACING_Y) ); 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir //------------------------------------------------------------------------------ 174*cdf0e10cSrcweir void OScrollWindowHelper::Resize() 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir Window::Resize(); 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir Size aTotalOutputSize = GetOutputSizePixel(); 179*cdf0e10cSrcweir long nHScrollHeight = GetHScrollBar()->GetSizePixel().Height(); 180*cdf0e10cSrcweir long nVScrollWidth = GetVScrollBar()->GetSizePixel().Width(); 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir GetHScrollBar()->SetPosSizePixel( 183*cdf0e10cSrcweir Point( 0, aTotalOutputSize.Height()-nHScrollHeight ), 184*cdf0e10cSrcweir Size( aTotalOutputSize.Width()-nVScrollWidth, nHScrollHeight ) 185*cdf0e10cSrcweir ); 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir GetVScrollBar()->SetPosSizePixel( 188*cdf0e10cSrcweir Point( aTotalOutputSize.Width()-nVScrollWidth, 0 ), 189*cdf0e10cSrcweir Size( nVScrollWidth, aTotalOutputSize.Height()-nHScrollHeight ) 190*cdf0e10cSrcweir ); 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir m_pCornerWindow->SetPosSizePixel( 193*cdf0e10cSrcweir Point( aTotalOutputSize.Width() - nVScrollWidth, aTotalOutputSize.Height() - nHScrollHeight), 194*cdf0e10cSrcweir Size( nVScrollWidth, nHScrollHeight ) 195*cdf0e10cSrcweir ); 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir GetHScrollBar()->SetPageSize( aTotalOutputSize.Width() ); 198*cdf0e10cSrcweir GetHScrollBar()->SetVisibleSize( aTotalOutputSize.Width() ); 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir GetVScrollBar()->SetPageSize( aTotalOutputSize.Height() ); 201*cdf0e10cSrcweir GetVScrollBar()->SetVisibleSize( aTotalOutputSize.Height() ); 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir // adjust the ranges of the scrollbars if neccessary 204*cdf0e10cSrcweir long lRange = GetHScrollBar()->GetRange().Max() - GetHScrollBar()->GetRange().Min(); 205*cdf0e10cSrcweir if (m_pTableView->GetScrollOffset().X() + aTotalOutputSize.Width() > lRange) 206*cdf0e10cSrcweir GetHScrollBar()->SetRangeMax(m_pTableView->GetScrollOffset().X() + aTotalOutputSize.Width() + GetHScrollBar()->GetRange().Min()); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir lRange = GetVScrollBar()->GetRange().Max() - GetVScrollBar()->GetRange().Min(); 209*cdf0e10cSrcweir if (m_pTableView->GetScrollOffset().Y() + aTotalOutputSize.Height() > lRange) 210*cdf0e10cSrcweir GetVScrollBar()->SetRangeMax(m_pTableView->GetScrollOffset().Y() + aTotalOutputSize.Height() + GetVScrollBar()->GetRange().Min()); 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir m_pTableView->SetPosSizePixel(Point( 0, 0 ),Size( aTotalOutputSize.Width()-nVScrollWidth, aTotalOutputSize.Height()-nHScrollHeight )); 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 215*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 216*cdf0e10cSrcweir //================================================================== 217*cdf0e10cSrcweir // class OJoinTableView 218*cdf0e10cSrcweir //================================================================== 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir //const long WINDOW_WIDTH = 1000; 221*cdf0e10cSrcweir //const long WINDOW_HEIGHT = 1000; 222*cdf0e10cSrcweir DBG_NAME(OJoinTableView); 223*cdf0e10cSrcweir //------------------------------------------------------------------------------ 224*cdf0e10cSrcweir OJoinTableView::OJoinTableView( Window* pParent, OJoinDesignView* pView ) 225*cdf0e10cSrcweir :Window( pParent,WB_BORDER ) 226*cdf0e10cSrcweir ,DropTargetHelper(this) 227*cdf0e10cSrcweir ,m_aDragOffset( Point(0,0) ) 228*cdf0e10cSrcweir ,m_aScrollOffset( Point(0,0) ) 229*cdf0e10cSrcweir ,m_pDragWin( NULL ) 230*cdf0e10cSrcweir ,m_pSizingWin( NULL ) 231*cdf0e10cSrcweir ,m_pSelectedConn( NULL ) 232*cdf0e10cSrcweir ,m_bTrackingInitiallyMoved(sal_False) 233*cdf0e10cSrcweir ,m_pLastFocusTabWin(NULL) 234*cdf0e10cSrcweir ,m_pView( pView ) 235*cdf0e10cSrcweir ,m_pAccessible(NULL) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir DBG_CTOR(OJoinTableView,NULL); 238*cdf0e10cSrcweir SetSizePixel( Size(1000, 1000) ); 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir InitColors(); 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir m_aDragScrollTimer.SetTimeoutHdl(LINK(this, OJoinTableView, OnDragScrollTimer)); 243*cdf0e10cSrcweir } 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir //------------------------------------------------------------------------------ 246*cdf0e10cSrcweir OJoinTableView::~OJoinTableView() 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir DBG_DTOR(OJoinTableView,NULL); 249*cdf0e10cSrcweir if( m_pAccessible ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir m_pAccessible->clearTableView(); 252*cdf0e10cSrcweir m_pAccessible = NULL; 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 255*cdf0e10cSrcweir // Listen loeschen 256*cdf0e10cSrcweir clearLayoutInformation(); 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir //------------------------------------------------------------------------------ 259*cdf0e10cSrcweir IMPL_LINK( OJoinTableView, ScrollHdl, ScrollBar*, pScrollBar ) 260*cdf0e10cSrcweir { 261*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 262*cdf0e10cSrcweir // Alle Fenster verschieben 263*cdf0e10cSrcweir ScrollPane( pScrollBar->GetDelta(), (pScrollBar == GetHScrollBar()), sal_False ); 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir return 0; 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir //------------------------------------------------------------------------------ 268*cdf0e10cSrcweir void OJoinTableView::Resize() 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 271*cdf0e10cSrcweir Window::Resize(); 272*cdf0e10cSrcweir m_aOutputSize = GetSizePixel(); 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir // tab win positions may not be up-to-date 275*cdf0e10cSrcweir if (m_aTableMap.empty()) 276*cdf0e10cSrcweir // no tab wins ... 277*cdf0e10cSrcweir return; 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir // we have at least one table so resize it 280*cdf0e10cSrcweir m_aScrollOffset.X() = GetHScrollBar()->GetThumbPos(); 281*cdf0e10cSrcweir m_aScrollOffset.Y() = GetVScrollBar()->GetThumbPos(); 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir OTableWindow* pCheck = m_aTableMap.begin()->second; 284*cdf0e10cSrcweir Point aRealPos = pCheck->GetPosPixel(); 285*cdf0e10cSrcweir Point aAssumedPos = pCheck->GetData()->GetPosition() - GetScrollOffset(); 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir if (aRealPos == aAssumedPos) 288*cdf0e10cSrcweir // all ok 289*cdf0e10cSrcweir return; 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 292*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 293*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir OTableWindow* pCurrent = aIter->second; 296*cdf0e10cSrcweir Point aPos(pCurrent->GetData()->GetPosition() - GetScrollOffset()); 297*cdf0e10cSrcweir pCurrent->SetPosPixel(aPos); 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir //------------------------------------------------------------------------------ 301*cdf0e10cSrcweir sal_uLong OJoinTableView::GetTabWinCount() 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 304*cdf0e10cSrcweir return m_aTableMap.size(); 305*cdf0e10cSrcweir } 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir //------------------------------------------------------------------------------ 308*cdf0e10cSrcweir bool OJoinTableView::RemoveConnection( OTableConnection* _pConn,sal_Bool _bDelete ) 309*cdf0e10cSrcweir { 310*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 311*cdf0e10cSrcweir DeselectConn(_pConn); 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir // to force a redraw 314*cdf0e10cSrcweir _pConn->InvalidateConnection(); 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir m_pView->getController().removeConnectionData( _pConn->GetData() ); 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir m_vTableConnection.erase( 319*cdf0e10cSrcweir ::std::find(m_vTableConnection.begin(),m_vTableConnection.end(),_pConn) ); 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir modified(); 322*cdf0e10cSrcweir if ( m_pAccessible ) 323*cdf0e10cSrcweir m_pAccessible->notifyAccessibleEvent( AccessibleEventId::CHILD, 324*cdf0e10cSrcweir makeAny(_pConn->GetAccessible()), 325*cdf0e10cSrcweir Any()); 326*cdf0e10cSrcweir if ( _bDelete ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir delete _pConn; 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir return true; 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir //------------------------------------------------------------------------ 335*cdf0e10cSrcweir OTableWindow* OJoinTableView::GetTabWindow( const String& rName ) 336*cdf0e10cSrcweir { 337*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 338*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.find(rName); 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir return aIter == m_aTableMap.end() ? NULL : aIter->second; 341*cdf0e10cSrcweir } 342*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 343*cdf0e10cSrcweir TTableWindowData::value_type OJoinTableView::createTableWindowData(const ::rtl::OUString& _rComposedName 344*cdf0e10cSrcweir ,const ::rtl::OUString& _sTableName 345*cdf0e10cSrcweir ,const ::rtl::OUString& _rWinName) 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir TTableWindowData::value_type pData( CreateImpl(_rComposedName, _sTableName,_rWinName) ); 348*cdf0e10cSrcweir OJoinDesignView* pParent = getDesignView(); 349*cdf0e10cSrcweir try 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir if ( !pData->init(pParent->getController().getConnection(),allowQueries()) ) 352*cdf0e10cSrcweir { 353*cdf0e10cSrcweir if ( pData->isValid() ) 354*cdf0e10cSrcweir onNoColumns_throw(); 355*cdf0e10cSrcweir else 356*cdf0e10cSrcweir pData.reset(); 357*cdf0e10cSrcweir } 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir catch ( const SQLException& ) 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir ::dbaui::showError( ::dbtools::SQLExceptionInfo( ::cppu::getCaughtException() ), 362*cdf0e10cSrcweir pParent, pParent->getController().getORB() ); 363*cdf0e10cSrcweir } 364*cdf0e10cSrcweir catch( const WrappedTargetException& e ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir SQLException aSql; 367*cdf0e10cSrcweir if ( e.TargetException >>= aSql ) 368*cdf0e10cSrcweir ::dbaui::showError( ::dbtools::SQLExceptionInfo( aSql ), pParent, pParent->getController().getORB() ); 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir catch( const Exception& ) 371*cdf0e10cSrcweir { 372*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 373*cdf0e10cSrcweir } 374*cdf0e10cSrcweir return pData; 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 377*cdf0e10cSrcweir OTableWindowData* OJoinTableView::CreateImpl(const ::rtl::OUString& _rComposedName 378*cdf0e10cSrcweir ,const ::rtl::OUString& _sTableName 379*cdf0e10cSrcweir ,const ::rtl::OUString& _rWinName) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir return new OTableWindowData( NULL,_rComposedName,_sTableName, _rWinName ); 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir //------------------------------------------------------------------------------ 384*cdf0e10cSrcweir void OJoinTableView::AddTabWin(const ::rtl::OUString& _rComposedName, const ::rtl::OUString& rWinName, sal_Bool /*bNewTable*/) 385*cdf0e10cSrcweir { 386*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 387*cdf0e10cSrcweir OSL_ENSURE(_rComposedName.getLength(),"There must be a table name supplied!"); 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir TTableWindowData::value_type pNewTabWinData(createTableWindowData( _rComposedName, rWinName,rWinName )); 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 392*cdf0e10cSrcweir // Neues Fenster in Fensterliste eintragen 393*cdf0e10cSrcweir OTableWindow* pNewTabWin = createWindow( pNewTabWinData ); 394*cdf0e10cSrcweir if ( pNewTabWin->Init() ) 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir m_pView->getController().getTableWindowData()->push_back( pNewTabWinData); 397*cdf0e10cSrcweir // when we already have a table with this name insert the full qualified one instead 398*cdf0e10cSrcweir if(m_aTableMap.find(rWinName) != m_aTableMap.end()) 399*cdf0e10cSrcweir m_aTableMap[_rComposedName] = pNewTabWin; 400*cdf0e10cSrcweir else 401*cdf0e10cSrcweir m_aTableMap[rWinName] = pNewTabWin; 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir SetDefaultTabWinPosSize( pNewTabWin ); 404*cdf0e10cSrcweir pNewTabWin->Show(); 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir modified(); 407*cdf0e10cSrcweir if ( m_pAccessible ) 408*cdf0e10cSrcweir m_pAccessible->notifyAccessibleEvent( AccessibleEventId::CHILD, 409*cdf0e10cSrcweir Any(), 410*cdf0e10cSrcweir makeAny(pNewTabWin->GetAccessible())); 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir else 413*cdf0e10cSrcweir { 414*cdf0e10cSrcweir pNewTabWin->clearListBox(); 415*cdf0e10cSrcweir delete pNewTabWin; 416*cdf0e10cSrcweir } 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir 419*cdf0e10cSrcweir //------------------------------------------------------------------------------ 420*cdf0e10cSrcweir void OJoinTableView::RemoveTabWin( OTableWindow* pTabWin ) 421*cdf0e10cSrcweir { 422*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 423*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 424*cdf0e10cSrcweir // first delete all connections of this window to others 425*cdf0e10cSrcweir bool bRemove = true; 426*cdf0e10cSrcweir TTableWindowData::value_type pData = pTabWin->GetData(); 427*cdf0e10cSrcweir sal_Int32 nCount = m_vTableConnection.size(); 428*cdf0e10cSrcweir ::std::vector<OTableConnection*>::reverse_iterator aIter = m_vTableConnection.rbegin(); 429*cdf0e10cSrcweir while(aIter != m_vTableConnection.rend() && bRemove) 430*cdf0e10cSrcweir { 431*cdf0e10cSrcweir OTableConnection* pTabConn = (*aIter); 432*cdf0e10cSrcweir if( 433*cdf0e10cSrcweir ( pData == pTabConn->GetData()->getReferencingTable()) || 434*cdf0e10cSrcweir ( pData == pTabConn->GetData()->getReferencedTable()) 435*cdf0e10cSrcweir ) 436*cdf0e10cSrcweir { 437*cdf0e10cSrcweir bRemove = RemoveConnection( pTabConn ,sal_True); 438*cdf0e10cSrcweir aIter = m_vTableConnection.rbegin(); 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir else 441*cdf0e10cSrcweir ++aIter; 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir 444*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 445*cdf0e10cSrcweir // then delete the window itself 446*cdf0e10cSrcweir if ( bRemove ) 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir if ( m_pAccessible ) 449*cdf0e10cSrcweir m_pAccessible->notifyAccessibleEvent( AccessibleEventId::CHILD, 450*cdf0e10cSrcweir makeAny(pTabWin->GetAccessible()),Any() 451*cdf0e10cSrcweir ); 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir pTabWin->Hide(); 454*cdf0e10cSrcweir OJoinController& rController = m_pView->getController(); 455*cdf0e10cSrcweir TTableWindowData::iterator aFind = ::std::find(rController.getTableWindowData()->begin(),rController.getTableWindowData()->end(),pData); 456*cdf0e10cSrcweir if(aFind != rController.getTableWindowData()->end()) 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir rController.getTableWindowData()->erase(aFind); 459*cdf0e10cSrcweir rController.setModified(sal_True); 460*cdf0e10cSrcweir } 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir String aWinName = pTabWin->GetWinName(); 463*cdf0e10cSrcweir if(m_aTableMap.find(aWinName) != m_aTableMap.end()) 464*cdf0e10cSrcweir m_aTableMap.erase( aWinName ); 465*cdf0e10cSrcweir else 466*cdf0e10cSrcweir m_aTableMap.erase( pTabWin->GetComposedName() ); 467*cdf0e10cSrcweir 468*cdf0e10cSrcweir if (pTabWin == m_pLastFocusTabWin) 469*cdf0e10cSrcweir m_pLastFocusTabWin = NULL; 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir pTabWin->clearListBox(); 472*cdf0e10cSrcweir delete pTabWin; 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir } 475*cdf0e10cSrcweir if ( (sal_Int32)m_vTableConnection.size() < (nCount-1) ) // if some connections could be removed 476*cdf0e10cSrcweir modified(); 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir namespace 479*cdf0e10cSrcweir { 480*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 481*cdf0e10cSrcweir sal_Bool isScrollAllowed( OJoinTableView* _pView,long nDelta, sal_Bool bHoriz) 482*cdf0e10cSrcweir { 483*cdf0e10cSrcweir sal_Bool bRet = sal_True; 484*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 485*cdf0e10cSrcweir // adjust ScrollBar-Positions 486*cdf0e10cSrcweir ScrollBar* pBar = _pView->GetVScrollBar(); 487*cdf0e10cSrcweir if( bHoriz ) 488*cdf0e10cSrcweir pBar = _pView->GetHScrollBar(); 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir long nOldThumbPos = pBar->GetThumbPos(); 491*cdf0e10cSrcweir long nNewThumbPos = nOldThumbPos + nDelta; 492*cdf0e10cSrcweir if( nNewThumbPos < 0 ) 493*cdf0e10cSrcweir nNewThumbPos = 0;// bRet = sal_False; 494*cdf0e10cSrcweir else if( nNewThumbPos > pBar->GetRangeMax() ) 495*cdf0e10cSrcweir nNewThumbPos = pBar->GetRangeMax();// bRet = sal_False; 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir if ( bHoriz ) 498*cdf0e10cSrcweir { 499*cdf0e10cSrcweir if( nNewThumbPos == _pView->GetScrollOffset().X() ) 500*cdf0e10cSrcweir return sal_False; 501*cdf0e10cSrcweir } 502*cdf0e10cSrcweir else if ( nNewThumbPos == _pView->GetScrollOffset().Y() ) 503*cdf0e10cSrcweir return sal_False; 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir return bRet; 506*cdf0e10cSrcweir } 507*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 508*cdf0e10cSrcweir sal_Bool getMovementImpl(OJoinTableView* _pView,const Point& _rPoint,const Size& _rSize,long& _nScrollX,long& _nScrollY) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir _nScrollY = _nScrollX = 0; 511*cdf0e10cSrcweir // data about the tab win 512*cdf0e10cSrcweir Point aUpperLeft = _rPoint; 513*cdf0e10cSrcweir // normalize with respect to visibility 514*cdf0e10cSrcweir aUpperLeft -= _pView->GetScrollOffset(); 515*cdf0e10cSrcweir // aUpperLeft.Y() -= _pView->GetScrollOffset().Y(); 516*cdf0e10cSrcweir Point aLowerRight(aUpperLeft.X() + _rSize.Width(), aUpperLeft.Y() + _rSize.Height()); 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir // data about ourself 519*cdf0e10cSrcweir Size aSize = _pView->getRealOutputSize(); //GetOutputSizePixel(); 520*cdf0e10cSrcweir 521*cdf0e10cSrcweir sal_Bool bVisbile = sal_True; 522*cdf0e10cSrcweir sal_Bool bFitsHor = (aUpperLeft.X() >= 0) && (aLowerRight.X() <= aSize.Width()); 523*cdf0e10cSrcweir sal_Bool bFitsVert= (aUpperLeft.Y() >= 0) && (aLowerRight.Y() <= aSize.Height()); 524*cdf0e10cSrcweir if (!bFitsHor || !bFitsVert) 525*cdf0e10cSrcweir { 526*cdf0e10cSrcweir // #100386# OJ 527*cdf0e10cSrcweir if (!bFitsHor) 528*cdf0e10cSrcweir { 529*cdf0e10cSrcweir // ensure the visibility of the right border 530*cdf0e10cSrcweir if ( aLowerRight.X() > aSize.Width() ) 531*cdf0e10cSrcweir _nScrollX = aLowerRight.X() - aSize.Width() + TABWIN_SPACING_X; 532*cdf0e10cSrcweir 533*cdf0e10cSrcweir // ensure the visibility of the left border (higher priority) 534*cdf0e10cSrcweir // if ( (aUpperLeft.X() - _nScrollX) < 0 ) 535*cdf0e10cSrcweir if ( aUpperLeft.X() < 0 ) 536*cdf0e10cSrcweir _nScrollX = aUpperLeft.X() - TABWIN_SPACING_X; 537*cdf0e10cSrcweir } 538*cdf0e10cSrcweir 539*cdf0e10cSrcweir if (!bFitsVert) 540*cdf0e10cSrcweir { 541*cdf0e10cSrcweir // lower border 542*cdf0e10cSrcweir if ( aLowerRight.Y() > aSize.Height() ) 543*cdf0e10cSrcweir _nScrollY = aLowerRight.Y() - aSize.Height() + TABWIN_SPACING_Y; 544*cdf0e10cSrcweir // upper border 545*cdf0e10cSrcweir // if ( (aUpperLeft.Y() - _nScrollY) < 0 ) 546*cdf0e10cSrcweir if ( aUpperLeft.Y() < 0 ) 547*cdf0e10cSrcweir _nScrollY = aUpperLeft.Y() - TABWIN_SPACING_Y; 548*cdf0e10cSrcweir } 549*cdf0e10cSrcweir 550*cdf0e10cSrcweir if ( _nScrollX ) // aSize.Width() > _rSize.Width() && 551*cdf0e10cSrcweir bVisbile = isScrollAllowed(_pView,_nScrollX, sal_True); 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir if ( _nScrollY ) // aSize.Height() > _rSize.Height() && 554*cdf0e10cSrcweir bVisbile = bVisbile && isScrollAllowed(_pView,_nScrollY, sal_False); 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir if ( bVisbile ) 557*cdf0e10cSrcweir { 558*cdf0e10cSrcweir sal_Int32 nHRangeMax = _pView->GetHScrollBar()->GetRangeMax(); 559*cdf0e10cSrcweir sal_Int32 nVRangeMax = _pView->GetVScrollBar()->GetRangeMax(); 560*cdf0e10cSrcweir 561*cdf0e10cSrcweir if ( aSize.Width() + _pView->GetHScrollBar()->GetThumbPos() + _nScrollX > nHRangeMax ) 562*cdf0e10cSrcweir bVisbile = sal_False; 563*cdf0e10cSrcweir if ( bVisbile && aSize.Height() + _pView->GetVScrollBar()->GetThumbPos() + _nScrollY > nVRangeMax ) 564*cdf0e10cSrcweir bVisbile = sal_False; 565*cdf0e10cSrcweir } 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir 568*cdf0e10cSrcweir 569*cdf0e10cSrcweir return bVisbile; 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir } // end of ano namespace 572*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 573*cdf0e10cSrcweir sal_Bool OJoinTableView::isMovementAllowed(const Point& _rPoint,const Size& _rSize) 574*cdf0e10cSrcweir { 575*cdf0e10cSrcweir long nX,nY; 576*cdf0e10cSrcweir return getMovementImpl(this,_rPoint,_rSize,nX,nY); 577*cdf0e10cSrcweir } 578*cdf0e10cSrcweir //------------------------------------------------------------------------------ 579*cdf0e10cSrcweir void OJoinTableView::EnsureVisible(const OTableWindow* _pWin) 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir // data about the tab win 582*cdf0e10cSrcweir TTableWindowData::value_type pData = _pWin->GetData(); 583*cdf0e10cSrcweir // Point aUpperLeft = pData->GetPosition(); 584*cdf0e10cSrcweir EnsureVisible( pData->GetPosition() , pData->GetSize()); 585*cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir //------------------------------------------------------------------------------ 588*cdf0e10cSrcweir void OJoinTableView::EnsureVisible(const Point& _rPoint,const Size& _rSize) 589*cdf0e10cSrcweir { 590*cdf0e10cSrcweir long nScrollX,nScrollY; 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir if ( getMovementImpl(this,_rPoint,_rSize,nScrollX,nScrollY) ) 593*cdf0e10cSrcweir { 594*cdf0e10cSrcweir sal_Bool bVisbile = sal_True; 595*cdf0e10cSrcweir if (nScrollX) 596*cdf0e10cSrcweir bVisbile = ScrollPane(nScrollX, sal_True, sal_True); 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir if (nScrollY) 599*cdf0e10cSrcweir bVisbile = bVisbile && ScrollPane(nScrollY, sal_False, sal_True); 600*cdf0e10cSrcweir } 601*cdf0e10cSrcweir } 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir //------------------------------------------------------------------------------ 604*cdf0e10cSrcweir void OJoinTableView::SetDefaultTabWinPosSize( OTableWindow* pTabWin ) 605*cdf0e10cSrcweir { 606*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 607*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 608*cdf0e10cSrcweir // Position bestimmen: 609*cdf0e10cSrcweir // Das Fenster wird in Zeilen der Hoehe TABWIN_SPACING_Y+TABWIN_HEIGTH_STD aufgeteilt. 610*cdf0e10cSrcweir // Dann wird fuer jede Zeile geprueft, ob noch Platz fuer ein weiteres Fenster ist. 611*cdf0e10cSrcweir // Wenn kein Platz ist, wird die naechste Zeile ueberprueft. 612*cdf0e10cSrcweir Size aOutSize = GetSizePixel(); 613*cdf0e10cSrcweir Point aNewPos( 0,0 ); 614*cdf0e10cSrcweir sal_uInt16 nRow = 0; 615*cdf0e10cSrcweir sal_Bool bEnd = sal_False; 616*cdf0e10cSrcweir while( !bEnd ) 617*cdf0e10cSrcweir { 618*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 619*cdf0e10cSrcweir // Neue Position auf Zeilenbeginn setzen 620*cdf0e10cSrcweir aNewPos.X() = TABWIN_SPACING_X; 621*cdf0e10cSrcweir aNewPos.Y() = (nRow+1) * TABWIN_SPACING_Y; 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 624*cdf0e10cSrcweir // Rectangle fuer die jeweilige Zeile bestimmen 625*cdf0e10cSrcweir Rectangle aRowRect( Point(0,0), aOutSize ); 626*cdf0e10cSrcweir aRowRect.Top() = nRow * ( TABWIN_SPACING_Y + TABWIN_HEIGHT_STD ); 627*cdf0e10cSrcweir aRowRect.Bottom() = (nRow+1) * ( TABWIN_SPACING_Y + TABWIN_HEIGHT_STD ); 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 630*cdf0e10cSrcweir // Belegte Bereiche dieser Zeile pruefen 631*cdf0e10cSrcweir OTableWindow* pOtherTabWin;// = GetTabWinMap()->First(); 632*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 633*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 634*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 635*cdf0e10cSrcweir { 636*cdf0e10cSrcweir pOtherTabWin = aIter->second; 637*cdf0e10cSrcweir Rectangle aOtherTabWinRect( pOtherTabWin->GetPosPixel(), pOtherTabWin->GetSizePixel() ); 638*cdf0e10cSrcweir 639*cdf0e10cSrcweir if( 640*cdf0e10cSrcweir ( (aOtherTabWinRect.Top()>aRowRect.Top()) && (aOtherTabWinRect.Top()<aRowRect.Bottom()) ) || 641*cdf0e10cSrcweir ( (aOtherTabWinRect.Bottom()>aRowRect.Top()) && (aOtherTabWinRect.Bottom()<aRowRect.Bottom()) ) 642*cdf0e10cSrcweir ) 643*cdf0e10cSrcweir { 644*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 645*cdf0e10cSrcweir // TabWin liegt in der Zeile 646*cdf0e10cSrcweir if( aOtherTabWinRect.Right()>aNewPos.X() ) 647*cdf0e10cSrcweir aNewPos.X() = aOtherTabWinRect.Right() + TABWIN_SPACING_X; 648*cdf0e10cSrcweir } 649*cdf0e10cSrcweir } 650*cdf0e10cSrcweir 651*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 652*cdf0e10cSrcweir // Ist in dieser Zeile noch Platz? 653*cdf0e10cSrcweir if( (aNewPos.X()+TABWIN_WIDTH_STD)<aRowRect.Right() ) 654*cdf0e10cSrcweir { 655*cdf0e10cSrcweir aNewPos.Y() = aRowRect.Top() + TABWIN_SPACING_Y; 656*cdf0e10cSrcweir bEnd = sal_True; 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir else 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir if( (aRowRect.Bottom()+aRowRect.GetHeight()) > aOutSize.Height() ) 661*cdf0e10cSrcweir { 662*cdf0e10cSrcweir // insert it in the first row 663*cdf0e10cSrcweir sal_Int32 nCount = m_aTableMap.size() % (nRow+1); 664*cdf0e10cSrcweir ++nCount; 665*cdf0e10cSrcweir aNewPos.Y() = nCount * TABWIN_SPACING_Y + (nCount-1)*CalcZoom(TABWIN_HEIGHT_STD); 666*cdf0e10cSrcweir bEnd = sal_True; 667*cdf0e10cSrcweir } 668*cdf0e10cSrcweir else 669*cdf0e10cSrcweir nRow++; 670*cdf0e10cSrcweir 671*cdf0e10cSrcweir } 672*cdf0e10cSrcweir } 673*cdf0e10cSrcweir 674*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 675*cdf0e10cSrcweir // Groesse bestimmen 676*cdf0e10cSrcweir Size aNewSize( CalcZoom(TABWIN_WIDTH_STD), CalcZoom(TABWIN_HEIGHT_STD) ); 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir // check if the new position in inside the scrollbars ranges 679*cdf0e10cSrcweir Point aBottom(aNewPos); 680*cdf0e10cSrcweir aBottom.X() += aNewSize.Width(); 681*cdf0e10cSrcweir aBottom.Y() += aNewSize.Height(); 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir if(!GetHScrollBar()->GetRange().IsInside(aBottom.X())) 684*cdf0e10cSrcweir GetHScrollBar()->SetRange( Range(0, aBottom.X()) ); 685*cdf0e10cSrcweir if(!GetVScrollBar()->GetRange().IsInside(aBottom.Y())) 686*cdf0e10cSrcweir GetVScrollBar()->SetRange( Range(0, aBottom.Y()) ); 687*cdf0e10cSrcweir 688*cdf0e10cSrcweir pTabWin->SetPosSizePixel( aNewPos, aNewSize ); 689*cdf0e10cSrcweir } 690*cdf0e10cSrcweir 691*cdf0e10cSrcweir //------------------------------------------------------------------------------ 692*cdf0e10cSrcweir void OJoinTableView::DataChanged(const DataChangedEvent& rDCEvt) 693*cdf0e10cSrcweir { 694*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 695*cdf0e10cSrcweir if (rDCEvt.GetType() == DATACHANGED_SETTINGS) 696*cdf0e10cSrcweir { 697*cdf0e10cSrcweir // nehmen wir den worst-case an : die Farben haben sich geaendert, also 698*cdf0e10cSrcweir // mich anpassen 699*cdf0e10cSrcweir InitColors(); 700*cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 701*cdf0e10cSrcweir // durch das Invalidate werden auch die Connections neu gezeichnet, so dass die auch 702*cdf0e10cSrcweir // gleich in den neuen Farben dargestellt werden 703*cdf0e10cSrcweir } 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir 706*cdf0e10cSrcweir //------------------------------------------------------------------------------ 707*cdf0e10cSrcweir void OJoinTableView::InitColors() 708*cdf0e10cSrcweir { 709*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 710*cdf0e10cSrcweir // die Farben fuer die Darstellung sollten die Systemfarben sein 711*cdf0e10cSrcweir StyleSettings aSystemStyle = Application::GetSettings().GetStyleSettings(); 712*cdf0e10cSrcweir SetBackground(Wallpaper(Color(aSystemStyle.GetDialogColor()))); 713*cdf0e10cSrcweir } 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir //------------------------------------------------------------------------------ 716*cdf0e10cSrcweir void OJoinTableView::BeginChildMove( OTableWindow* pTabWin, const Point& rMousePos ) 717*cdf0e10cSrcweir { 718*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 719*cdf0e10cSrcweir 720*cdf0e10cSrcweir if (m_pView->getController().isReadOnly()) 721*cdf0e10cSrcweir return; 722*cdf0e10cSrcweir 723*cdf0e10cSrcweir m_pDragWin = pTabWin; 724*cdf0e10cSrcweir SetPointer(Pointer(POINTER_MOVE)); 725*cdf0e10cSrcweir Point aMousePos = ScreenToOutputPixel( rMousePos ); 726*cdf0e10cSrcweir m_aDragOffset = aMousePos - pTabWin->GetPosPixel(); 727*cdf0e10cSrcweir m_pDragWin->SetZOrder(NULL, WINDOW_ZORDER_FIRST); 728*cdf0e10cSrcweir m_bTrackingInitiallyMoved = sal_False; 729*cdf0e10cSrcweir StartTracking(); 730*cdf0e10cSrcweir } 731*cdf0e10cSrcweir 732*cdf0e10cSrcweir void OJoinTableView::NotifyTitleClicked( OTableWindow* pTabWin, const Point rMousePos ) 733*cdf0e10cSrcweir { 734*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 735*cdf0e10cSrcweir DeselectConn(GetSelectedConn()); 736*cdf0e10cSrcweir BeginChildMove(pTabWin, rMousePos); 737*cdf0e10cSrcweir } 738*cdf0e10cSrcweir 739*cdf0e10cSrcweir //------------------------------------------------------------------------------ 740*cdf0e10cSrcweir void OJoinTableView::BeginChildSizing( OTableWindow* pTabWin, const Pointer& rPointer ) 741*cdf0e10cSrcweir { 742*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 743*cdf0e10cSrcweir 744*cdf0e10cSrcweir if (m_pView->getController().isReadOnly()) 745*cdf0e10cSrcweir return; 746*cdf0e10cSrcweir 747*cdf0e10cSrcweir SetPointer( rPointer ); 748*cdf0e10cSrcweir m_pSizingWin = pTabWin; 749*cdf0e10cSrcweir StartTracking(); 750*cdf0e10cSrcweir } 751*cdf0e10cSrcweir 752*cdf0e10cSrcweir //------------------------------------------------------------------------------ 753*cdf0e10cSrcweir sal_Bool OJoinTableView::ScrollPane( long nDelta, sal_Bool bHoriz, sal_Bool bPaintScrollBars ) 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 756*cdf0e10cSrcweir sal_Bool bRet = sal_True; 757*cdf0e10cSrcweir 758*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 759*cdf0e10cSrcweir // ScrollBar-Positionen anpassen 760*cdf0e10cSrcweir if( bPaintScrollBars ) 761*cdf0e10cSrcweir { 762*cdf0e10cSrcweir if( bHoriz ) 763*cdf0e10cSrcweir { 764*cdf0e10cSrcweir long nOldThumbPos = GetHScrollBar()->GetThumbPos(); 765*cdf0e10cSrcweir long nNewThumbPos = nOldThumbPos + nDelta; 766*cdf0e10cSrcweir if( nNewThumbPos < 0 ) 767*cdf0e10cSrcweir { 768*cdf0e10cSrcweir nNewThumbPos = 0; 769*cdf0e10cSrcweir bRet = sal_False; 770*cdf0e10cSrcweir } 771*cdf0e10cSrcweir if( nNewThumbPos > GetHScrollBar()->GetRange().Max() ) 772*cdf0e10cSrcweir { 773*cdf0e10cSrcweir nNewThumbPos = GetHScrollBar()->GetRange().Max(); 774*cdf0e10cSrcweir bRet = sal_False; 775*cdf0e10cSrcweir } 776*cdf0e10cSrcweir GetHScrollBar()->SetThumbPos( nNewThumbPos ); 777*cdf0e10cSrcweir nDelta = GetHScrollBar()->GetThumbPos() - nOldThumbPos; 778*cdf0e10cSrcweir } 779*cdf0e10cSrcweir else 780*cdf0e10cSrcweir { 781*cdf0e10cSrcweir long nOldThumbPos = GetVScrollBar()->GetThumbPos(); 782*cdf0e10cSrcweir long nNewThumbPos = nOldThumbPos+nDelta; 783*cdf0e10cSrcweir if( nNewThumbPos < 0 ) 784*cdf0e10cSrcweir { 785*cdf0e10cSrcweir nNewThumbPos = 0; 786*cdf0e10cSrcweir bRet = sal_False; 787*cdf0e10cSrcweir } 788*cdf0e10cSrcweir if( nNewThumbPos > GetVScrollBar()->GetRange().Max() ) 789*cdf0e10cSrcweir { 790*cdf0e10cSrcweir nNewThumbPos = GetVScrollBar()->GetRange().Max(); 791*cdf0e10cSrcweir bRet = sal_False; 792*cdf0e10cSrcweir } 793*cdf0e10cSrcweir GetVScrollBar()->SetThumbPos( nNewThumbPos ); 794*cdf0e10cSrcweir nDelta = GetVScrollBar()->GetThumbPos() - nOldThumbPos; 795*cdf0e10cSrcweir } 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir 798*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 799*cdf0e10cSrcweir // Wenn ScrollOffset bereits an den Grenzen liegt, kein Neuzeichnen 800*cdf0e10cSrcweir if( (GetHScrollBar()->GetThumbPos()==m_aScrollOffset.X()) && 801*cdf0e10cSrcweir (GetVScrollBar()->GetThumbPos()==m_aScrollOffset.Y()) ) 802*cdf0e10cSrcweir return sal_False; 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 805*cdf0e10cSrcweir // ScrollOffset neu setzen 806*cdf0e10cSrcweir if (bHoriz) 807*cdf0e10cSrcweir m_aScrollOffset.X() = GetHScrollBar()->GetThumbPos(); 808*cdf0e10cSrcweir else 809*cdf0e10cSrcweir m_aScrollOffset.Y() = GetVScrollBar()->GetThumbPos(); 810*cdf0e10cSrcweir 811*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 812*cdf0e10cSrcweir // Alle Fenster verschieben 813*cdf0e10cSrcweir OTableWindow* pTabWin; 814*cdf0e10cSrcweir Point aPos; 815*cdf0e10cSrcweir 816*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 817*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 818*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 819*cdf0e10cSrcweir { 820*cdf0e10cSrcweir pTabWin = aIter->second; 821*cdf0e10cSrcweir aPos = pTabWin->GetPosPixel(); 822*cdf0e10cSrcweir 823*cdf0e10cSrcweir if( bHoriz ) 824*cdf0e10cSrcweir aPos.X() -= nDelta; 825*cdf0e10cSrcweir else aPos.Y() -= nDelta; 826*cdf0e10cSrcweir 827*cdf0e10cSrcweir pTabWin->SetPosPixel( aPos ); 828*cdf0e10cSrcweir } 829*cdf0e10cSrcweir 830*cdf0e10cSrcweir Invalidate(); // INVALIDATE_NOCHILDREN 831*cdf0e10cSrcweir 832*cdf0e10cSrcweir return bRet; 833*cdf0e10cSrcweir } 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir //------------------------------------------------------------------------------ 836*cdf0e10cSrcweir void OJoinTableView::Tracking( const TrackingEvent& rTEvt ) 837*cdf0e10cSrcweir { 838*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 839*cdf0e10cSrcweir HideTracking(); 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir if (rTEvt.IsTrackingEnded()) 842*cdf0e10cSrcweir { 843*cdf0e10cSrcweir if( m_pDragWin ) 844*cdf0e10cSrcweir { 845*cdf0e10cSrcweir if (m_aDragScrollTimer.IsActive()) 846*cdf0e10cSrcweir m_aDragScrollTimer.Stop(); 847*cdf0e10cSrcweir 848*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 849*cdf0e10cSrcweir // Position des Childs nach Verschieben anpassen 850*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 851*cdf0e10cSrcweir // Fenster duerfen nicht aus Anzeigebereich herausbewegt werden 852*cdf0e10cSrcweir Point aDragWinPos = rTEvt.GetMouseEvent().GetPosPixel() - m_aDragOffset; 853*cdf0e10cSrcweir Size aDragWinSize = m_pDragWin->GetSizePixel(); 854*cdf0e10cSrcweir if( aDragWinPos.X() < 0 ) 855*cdf0e10cSrcweir aDragWinPos.X() = 0; 856*cdf0e10cSrcweir if( aDragWinPos.Y() < 0 ) 857*cdf0e10cSrcweir aDragWinPos.Y() = 0; 858*cdf0e10cSrcweir if( (aDragWinPos.X() + aDragWinSize.Width()) > m_aOutputSize.Width() ) 859*cdf0e10cSrcweir aDragWinPos.X() = m_aOutputSize.Width() - aDragWinSize.Width() - 1; 860*cdf0e10cSrcweir if( (aDragWinPos.Y() + aDragWinSize.Height()) > m_aOutputSize.Height() ) 861*cdf0e10cSrcweir aDragWinPos.Y() = m_aOutputSize.Height() - aDragWinSize.Height() - 1; 862*cdf0e10cSrcweir if( aDragWinPos.X() < 0 ) 863*cdf0e10cSrcweir aDragWinPos.X() = 0; 864*cdf0e10cSrcweir if( aDragWinPos.Y() < 0 ) 865*cdf0e10cSrcweir aDragWinPos.Y() = 0; 866*cdf0e10cSrcweir // TODO : nicht das Fenster neu positionieren, wenn es uebersteht, sondern einfach meinen Bereich erweitern 867*cdf0e10cSrcweir 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 870*cdf0e10cSrcweir // Fenster positionieren 871*cdf0e10cSrcweir EndTracking(); 872*cdf0e10cSrcweir m_pDragWin->SetZOrder(NULL, WINDOW_ZORDER_FIRST); 873*cdf0e10cSrcweir // erst mal testen, ob ich mich ueberhaupt bewegt habe 874*cdf0e10cSrcweir // (das verhindert das Setzen des modified-Flags, wenn sich eigentlich gar nichts getan hat) 875*cdf0e10cSrcweir TTableWindowData::value_type pData = m_pDragWin->GetData(); 876*cdf0e10cSrcweir if ( ! (pData && pData->HasPosition() && (pData->GetPosition() == aDragWinPos))) 877*cdf0e10cSrcweir { 878*cdf0e10cSrcweir // die alten logischen Koordinaten 879*cdf0e10cSrcweir Point ptOldPos = m_pDragWin->GetPosPixel() + Point(GetHScrollBar()->GetThumbPos(), GetVScrollBar()->GetThumbPos()); 880*cdf0e10cSrcweir // neu positionieren 881*cdf0e10cSrcweir m_pDragWin->SetPosPixel(aDragWinPos); 882*cdf0e10cSrcweir TabWinMoved(m_pDragWin, ptOldPos); 883*cdf0e10cSrcweir 884*cdf0e10cSrcweir m_pDragWin->GrabFocus(); 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir m_pDragWin = NULL; 887*cdf0e10cSrcweir SetPointer(Pointer(POINTER_ARROW)); 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir // else we handle the resizing 890*cdf0e10cSrcweir else if( m_pSizingWin ) 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir SetPointer( Pointer() ); 893*cdf0e10cSrcweir EndTracking(); 894*cdf0e10cSrcweir 895*cdf0e10cSrcweir // die alten physikalischen Koordinaten 896*cdf0e10cSrcweir 897*cdf0e10cSrcweir Size szOld = m_pSizingWin->GetSizePixel(); 898*cdf0e10cSrcweir Point ptOld = m_pSizingWin->GetPosPixel(); 899*cdf0e10cSrcweir Size aNewSize(CalcZoom(m_aSizingRect.GetSize().Width()),CalcZoom(m_aSizingRect.GetSize().Height())); 900*cdf0e10cSrcweir m_pSizingWin->SetPosSizePixel( m_aSizingRect.TopLeft(), aNewSize ); 901*cdf0e10cSrcweir TabWinSized(m_pSizingWin, ptOld, szOld); 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir m_pSizingWin->Invalidate( m_aSizingRect ); 904*cdf0e10cSrcweir m_pSizingWin = NULL; 905*cdf0e10cSrcweir } 906*cdf0e10cSrcweir } 907*cdf0e10cSrcweir else if (rTEvt.IsTrackingCanceled()) 908*cdf0e10cSrcweir { 909*cdf0e10cSrcweir if (m_aDragScrollTimer.IsActive()) 910*cdf0e10cSrcweir m_aDragScrollTimer.Stop(); 911*cdf0e10cSrcweir EndTracking(); 912*cdf0e10cSrcweir } 913*cdf0e10cSrcweir else 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir if( m_pDragWin ) 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir m_ptPrevDraggingPos = rTEvt.GetMouseEvent().GetPosPixel(); 918*cdf0e10cSrcweir // an Fenstergrenzen scrollen 919*cdf0e10cSrcweir ScrollWhileDragging(); 920*cdf0e10cSrcweir } 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir if( m_pSizingWin ) 923*cdf0e10cSrcweir { 924*cdf0e10cSrcweir Point aMousePos = rTEvt.GetMouseEvent().GetPosPixel(); 925*cdf0e10cSrcweir m_aSizingRect = m_pSizingWin->getSizingRect(aMousePos,m_aOutputSize); 926*cdf0e10cSrcweir Update(); 927*cdf0e10cSrcweir ShowTracking( m_aSizingRect, SHOWTRACK_SMALL | SHOWTRACK_WINDOW ); 928*cdf0e10cSrcweir } 929*cdf0e10cSrcweir } 930*cdf0e10cSrcweir } 931*cdf0e10cSrcweir 932*cdf0e10cSrcweir //------------------------------------------------------------------------------ 933*cdf0e10cSrcweir void OJoinTableView::ConnDoubleClicked( OTableConnection* /*pConnection*/ ) 934*cdf0e10cSrcweir { 935*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir //------------------------------------------------------------------------------ 939*cdf0e10cSrcweir void OJoinTableView::MouseButtonDown( const MouseEvent& rEvt ) 940*cdf0e10cSrcweir { 941*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 942*cdf0e10cSrcweir GrabFocus(); 943*cdf0e10cSrcweir Window::MouseButtonDown(rEvt); 944*cdf0e10cSrcweir } 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir //------------------------------------------------------------------------------ 947*cdf0e10cSrcweir void OJoinTableView::MouseButtonUp( const MouseEvent& rEvt ) 948*cdf0e10cSrcweir { 949*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 950*cdf0e10cSrcweir Window::MouseButtonUp(rEvt); 951*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 952*cdf0e10cSrcweir // Wurde eine Connection ausgewaehlt? 953*cdf0e10cSrcweir if( !m_vTableConnection.empty() ) 954*cdf0e10cSrcweir { 955*cdf0e10cSrcweir DeselectConn(GetSelectedConn()); 956*cdf0e10cSrcweir 957*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aIter = m_vTableConnection.begin(); 958*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aEnd = m_vTableConnection.end(); 959*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 960*cdf0e10cSrcweir { 961*cdf0e10cSrcweir if( (*aIter)->CheckHit(rEvt.GetPosPixel()) ) 962*cdf0e10cSrcweir { 963*cdf0e10cSrcweir SelectConn((*aIter)); 964*cdf0e10cSrcweir 965*cdf0e10cSrcweir // Doppelclick 966*cdf0e10cSrcweir if( rEvt.GetClicks() == 2 ) 967*cdf0e10cSrcweir ConnDoubleClicked( (*aIter) ); 968*cdf0e10cSrcweir 969*cdf0e10cSrcweir break; 970*cdf0e10cSrcweir } 971*cdf0e10cSrcweir } 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir } 974*cdf0e10cSrcweir 975*cdf0e10cSrcweir //------------------------------------------------------------------------------ 976*cdf0e10cSrcweir void OJoinTableView::KeyInput( const KeyEvent& rEvt ) 977*cdf0e10cSrcweir { 978*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 979*cdf0e10cSrcweir sal_uInt16 nCode = rEvt.GetKeyCode().GetCode(); 980*cdf0e10cSrcweir sal_Bool bShift = rEvt.GetKeyCode().IsShift(); 981*cdf0e10cSrcweir sal_Bool bCtrl = rEvt.GetKeyCode().IsMod1(); 982*cdf0e10cSrcweir 983*cdf0e10cSrcweir if( !bCtrl && !bShift && (nCode==KEY_DELETE) ) 984*cdf0e10cSrcweir { 985*cdf0e10cSrcweir if (GetSelectedConn()) 986*cdf0e10cSrcweir RemoveConnection( GetSelectedConn() ,sal_True); 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir else 989*cdf0e10cSrcweir Window::KeyInput( rEvt ); 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir 992*cdf0e10cSrcweir //------------------------------------------------------------------------------ 993*cdf0e10cSrcweir void OJoinTableView::DeselectConn(OTableConnection* pConn) 994*cdf0e10cSrcweir { 995*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 996*cdf0e10cSrcweir if (!pConn || !pConn->IsSelected()) 997*cdf0e10cSrcweir return; 998*cdf0e10cSrcweir 999*cdf0e10cSrcweir // die zugehoerigen Eitnraege in der ListBox des Tabellenfenster deselektieren 1000*cdf0e10cSrcweir OTableWindow* pWin = pConn->GetSourceWin(); 1001*cdf0e10cSrcweir if (pWin && pWin->GetListBox()) 1002*cdf0e10cSrcweir pWin->GetListBox()->SelectAll(sal_False); 1003*cdf0e10cSrcweir 1004*cdf0e10cSrcweir pWin = pConn->GetDestWin(); 1005*cdf0e10cSrcweir if (pWin && pWin->GetListBox()) 1006*cdf0e10cSrcweir pWin->GetListBox()->SelectAll(sal_False); 1007*cdf0e10cSrcweir 1008*cdf0e10cSrcweir pConn->Deselect(); 1009*cdf0e10cSrcweir m_pSelectedConn = NULL; 1010*cdf0e10cSrcweir } 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1013*cdf0e10cSrcweir void OJoinTableView::SelectConn(OTableConnection* pConn) 1014*cdf0e10cSrcweir { 1015*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1016*cdf0e10cSrcweir DeselectConn(GetSelectedConn()); 1017*cdf0e10cSrcweir 1018*cdf0e10cSrcweir pConn->Select(); 1019*cdf0e10cSrcweir m_pSelectedConn = pConn; 1020*cdf0e10cSrcweir GrabFocus(); // has to be called here because a table window may still be focused 1021*cdf0e10cSrcweir 1022*cdf0e10cSrcweir // die betroffenene Eintraege in den Windows selektieren 1023*cdf0e10cSrcweir OTableWindow* pConnSource = pConn->GetSourceWin(); 1024*cdf0e10cSrcweir OTableWindow* pConnDest = pConn->GetDestWin(); 1025*cdf0e10cSrcweir if (pConnSource && pConnDest) 1026*cdf0e10cSrcweir { 1027*cdf0e10cSrcweir OTableWindowListBox* pSourceBox = pConnSource->GetListBox(); 1028*cdf0e10cSrcweir OTableWindowListBox* pDestBox = pConnDest->GetListBox(); 1029*cdf0e10cSrcweir if (pSourceBox && pDestBox) 1030*cdf0e10cSrcweir { 1031*cdf0e10cSrcweir pSourceBox->SelectAll(sal_False); 1032*cdf0e10cSrcweir pDestBox->SelectAll(sal_False); 1033*cdf0e10cSrcweir 1034*cdf0e10cSrcweir SvLBoxEntry* pFirstSourceVisible = pSourceBox->GetFirstEntryInView(); 1035*cdf0e10cSrcweir SvLBoxEntry* pFirstDestVisible = pDestBox->GetFirstEntryInView(); 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir const ::std::vector<OConnectionLine*>* pLines = pConn->GetConnLineList(); 1038*cdf0e10cSrcweir ::std::vector<OConnectionLine*>::const_reverse_iterator aIter = pLines->rbegin(); 1039*cdf0e10cSrcweir for(;aIter != pLines->rend();++aIter) 1040*cdf0e10cSrcweir { 1041*cdf0e10cSrcweir if ((*aIter)->IsValid()) 1042*cdf0e10cSrcweir { 1043*cdf0e10cSrcweir SvLBoxEntry* pSourceEntry = pSourceBox->GetEntryFromText((*aIter)->GetData()->GetSourceFieldName()); 1044*cdf0e10cSrcweir if (pSourceEntry) 1045*cdf0e10cSrcweir { 1046*cdf0e10cSrcweir pSourceBox->Select(pSourceEntry, sal_True); 1047*cdf0e10cSrcweir pSourceBox->MakeVisible(pSourceEntry); 1048*cdf0e10cSrcweir } 1049*cdf0e10cSrcweir 1050*cdf0e10cSrcweir SvLBoxEntry* pDestEntry = pDestBox->GetEntryFromText((*aIter)->GetData()->GetDestFieldName()); 1051*cdf0e10cSrcweir if (pDestEntry) 1052*cdf0e10cSrcweir { 1053*cdf0e10cSrcweir pDestBox->Select(pDestEntry, sal_True); 1054*cdf0e10cSrcweir pDestBox->MakeVisible(pDestEntry); 1055*cdf0e10cSrcweir } 1056*cdf0e10cSrcweir 1057*cdf0e10cSrcweir } 1058*cdf0e10cSrcweir } 1059*cdf0e10cSrcweir 1060*cdf0e10cSrcweir if ((pFirstSourceVisible != pSourceBox->GetFirstEntryInView()) 1061*cdf0e10cSrcweir || (pFirstDestVisible != pDestBox->GetFirstEntryInView())) 1062*cdf0e10cSrcweir // es wurde gescrollt -> neu zeichnen 1063*cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 1064*cdf0e10cSrcweir } 1065*cdf0e10cSrcweir } 1066*cdf0e10cSrcweir } 1067*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1068*cdf0e10cSrcweir void OJoinTableView::Paint( const Rectangle& rRect ) 1069*cdf0e10cSrcweir { 1070*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1071*cdf0e10cSrcweir DrawConnections( rRect ); 1072*cdf0e10cSrcweir } 1073*cdf0e10cSrcweir 1074*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1075*cdf0e10cSrcweir void OJoinTableView::InvalidateConnections() 1076*cdf0e10cSrcweir { 1077*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1078*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1079*cdf0e10cSrcweir // Die Joins zeichnen 1080*cdf0e10cSrcweir ::std::for_each(m_vTableConnection.begin(),m_vTableConnection.end(), 1081*cdf0e10cSrcweir ::std::mem_fun(& OTableConnection::InvalidateConnection)); 1082*cdf0e10cSrcweir } 1083*cdf0e10cSrcweir 1084*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1085*cdf0e10cSrcweir void OJoinTableView::DrawConnections( const Rectangle& rRect ) 1086*cdf0e10cSrcweir { 1087*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1088*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1089*cdf0e10cSrcweir // Die Joins zeichnen 1090*cdf0e10cSrcweir ::std::for_each(m_vTableConnection.begin(),m_vTableConnection.end(),boost::bind( &OTableConnection::Draw, _1, boost::cref( rRect ))); 1091*cdf0e10cSrcweir // zum Schluss noch mal die selektierte ueber alle anderen drueber 1092*cdf0e10cSrcweir if (GetSelectedConn()) 1093*cdf0e10cSrcweir GetSelectedConn()->Draw( rRect ); 1094*cdf0e10cSrcweir } 1095*cdf0e10cSrcweir 1096*cdf0e10cSrcweir 1097*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1098*cdf0e10cSrcweir ::std::vector<OTableConnection*>::const_iterator OJoinTableView::getTableConnections(const OTableWindow* _pFromWin) const 1099*cdf0e10cSrcweir { 1100*cdf0e10cSrcweir return ::std::find_if( m_vTableConnection.begin(), 1101*cdf0e10cSrcweir m_vTableConnection.end(), 1102*cdf0e10cSrcweir ::std::bind2nd(::std::mem_fun(&OTableConnection::isTableConnection),_pFromWin)); 1103*cdf0e10cSrcweir } 1104*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1105*cdf0e10cSrcweir sal_Int32 OJoinTableView::getConnectionCount(const OTableWindow* _pFromWin) const 1106*cdf0e10cSrcweir { 1107*cdf0e10cSrcweir return ::std::count_if( m_vTableConnection.begin(), 1108*cdf0e10cSrcweir m_vTableConnection.end(), 1109*cdf0e10cSrcweir ::std::bind2nd(::std::mem_fun(&OTableConnection::isTableConnection),_pFromWin)); 1110*cdf0e10cSrcweir } 1111*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1112*cdf0e10cSrcweir sal_Bool OJoinTableView::ExistsAConn(const OTableWindow* pFrom) const 1113*cdf0e10cSrcweir { 1114*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1115*cdf0e10cSrcweir return getTableConnections(pFrom) != m_vTableConnection.end(); 1116*cdf0e10cSrcweir } 1117*cdf0e10cSrcweir //------------------------------------------------------------------------ 1118*cdf0e10cSrcweir void OJoinTableView::ClearAll() 1119*cdf0e10cSrcweir { 1120*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1121*cdf0e10cSrcweir SetUpdateMode(sal_False); 1122*cdf0e10cSrcweir 1123*cdf0e10cSrcweir HideTabWins(); 1124*cdf0e10cSrcweir 1125*cdf0e10cSrcweir // und das selbe mit den Connections 1126*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aIter = m_vTableConnection.begin(); 1127*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aEnd = m_vTableConnection.end(); 1128*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1129*cdf0e10cSrcweir RemoveConnection( *aIter ,sal_True); 1130*cdf0e10cSrcweir m_vTableConnection.clear(); 1131*cdf0e10cSrcweir 1132*cdf0e10cSrcweir m_pLastFocusTabWin = NULL; 1133*cdf0e10cSrcweir m_pSelectedConn = NULL; 1134*cdf0e10cSrcweir 1135*cdf0e10cSrcweir // scroll to the upper left 1136*cdf0e10cSrcweir ScrollPane(-GetScrollOffset().X(), sal_True, sal_True); 1137*cdf0e10cSrcweir ScrollPane(-GetScrollOffset().Y(), sal_False, sal_True); 1138*cdf0e10cSrcweir Invalidate(); 1139*cdf0e10cSrcweir } 1140*cdf0e10cSrcweir 1141*cdf0e10cSrcweir //------------------------------------------------------------------------ 1142*cdf0e10cSrcweir sal_Bool OJoinTableView::ScrollWhileDragging() 1143*cdf0e10cSrcweir { 1144*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1145*cdf0e10cSrcweir DBG_ASSERT(m_pDragWin != NULL, "OJoinTableView::ScrollWhileDragging darf nur waehrend Dragging eines Fensters aufgerufen werden !"); 1146*cdf0e10cSrcweir 1147*cdf0e10cSrcweir // den Timer schon mal killen 1148*cdf0e10cSrcweir if (m_aDragScrollTimer.IsActive()) 1149*cdf0e10cSrcweir m_aDragScrollTimer.Stop(); 1150*cdf0e10cSrcweir 1151*cdf0e10cSrcweir Point aDragWinPos = m_ptPrevDraggingPos - m_aDragOffset; 1152*cdf0e10cSrcweir Size aDragWinSize = m_pDragWin->GetSizePixel(); 1153*cdf0e10cSrcweir Point aLowerRight(aDragWinPos.X() + aDragWinSize.Width(), aDragWinPos.Y() + aDragWinSize.Height()); 1154*cdf0e10cSrcweir 1155*cdf0e10cSrcweir if (!m_bTrackingInitiallyMoved && (aDragWinPos == m_pDragWin->GetPosPixel())) 1156*cdf0e10cSrcweir return sal_True; 1157*cdf0e10cSrcweir 1158*cdf0e10cSrcweir // Darstellungsfehler vermeiden (wenn bei aktivem TrackingRect gescrollt wird) 1159*cdf0e10cSrcweir HideTracking(); 1160*cdf0e10cSrcweir 1161*cdf0e10cSrcweir sal_Bool bScrolling = sal_False; 1162*cdf0e10cSrcweir sal_Bool bNeedScrollTimer = sal_False; 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir // An Fenstergrenzen scrollen 1165*cdf0e10cSrcweir // TODO : nur dann abfangen, wenn das Fenster komplett verschwinden wuerde (nicht, solange noch ein Pixel sichtbar ist) 1166*cdf0e10cSrcweir if( aDragWinPos.X() < 5 ) 1167*cdf0e10cSrcweir { 1168*cdf0e10cSrcweir bScrolling = ScrollPane( -LINE_SIZE, sal_True, sal_True ); 1169*cdf0e10cSrcweir if( !bScrolling && (aDragWinPos.X()<0) ) 1170*cdf0e10cSrcweir aDragWinPos.X() = 0; 1171*cdf0e10cSrcweir 1172*cdf0e10cSrcweir // brauche ich weiteres (timergesteuertes) Scrolling ? 1173*cdf0e10cSrcweir bNeedScrollTimer = bScrolling && (aDragWinPos.X() < 5); 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir if( aLowerRight.X() > m_aOutputSize.Width() - 5 ) 1177*cdf0e10cSrcweir { 1178*cdf0e10cSrcweir bScrolling = ScrollPane( LINE_SIZE, sal_True, sal_True ) ; 1179*cdf0e10cSrcweir if( !bScrolling && ( aLowerRight.X() > m_aOutputSize.Width() ) ) 1180*cdf0e10cSrcweir aDragWinPos.X() = m_aOutputSize.Width() - aDragWinSize.Width(); 1181*cdf0e10cSrcweir 1182*cdf0e10cSrcweir // brauche ich weiteres (timergesteuertes) Scrolling ? 1183*cdf0e10cSrcweir bNeedScrollTimer = bScrolling && (aLowerRight.X() > m_aOutputSize.Width() - 5); 1184*cdf0e10cSrcweir } 1185*cdf0e10cSrcweir 1186*cdf0e10cSrcweir if( aDragWinPos.Y() < 5 ) 1187*cdf0e10cSrcweir { 1188*cdf0e10cSrcweir bScrolling = ScrollPane( -LINE_SIZE, sal_False, sal_True ); 1189*cdf0e10cSrcweir if( !bScrolling && (aDragWinPos.Y()<0) ) 1190*cdf0e10cSrcweir aDragWinPos.Y() = 0; 1191*cdf0e10cSrcweir 1192*cdf0e10cSrcweir bNeedScrollTimer = bScrolling && (aDragWinPos.Y() < 5); 1193*cdf0e10cSrcweir } 1194*cdf0e10cSrcweir 1195*cdf0e10cSrcweir if( aLowerRight.Y() > m_aOutputSize.Height() - 5 ) 1196*cdf0e10cSrcweir { 1197*cdf0e10cSrcweir bScrolling = ScrollPane( LINE_SIZE, sal_False, sal_True ); 1198*cdf0e10cSrcweir if( !bScrolling && ( (aDragWinPos.Y() + aDragWinSize.Height()) > m_aOutputSize.Height() ) ) 1199*cdf0e10cSrcweir aDragWinPos.Y() = m_aOutputSize.Height() - aDragWinSize.Height(); 1200*cdf0e10cSrcweir 1201*cdf0e10cSrcweir bNeedScrollTimer = bScrolling && (aLowerRight.Y() > m_aOutputSize.Height() - 5); 1202*cdf0e10cSrcweir } 1203*cdf0e10cSrcweir 1204*cdf0e10cSrcweir // Timer neu setzen, wenn noch notwendig 1205*cdf0e10cSrcweir if (bNeedScrollTimer) 1206*cdf0e10cSrcweir { 1207*cdf0e10cSrcweir m_aDragScrollTimer.SetTimeout(100); 1208*cdf0e10cSrcweir m_aDragScrollTimer.Start(); 1209*cdf0e10cSrcweir } 1210*cdf0e10cSrcweir 1211*cdf0e10cSrcweir // das DraggingRect neu zeichnen 1212*cdf0e10cSrcweir m_aDragRect = Rectangle(m_ptPrevDraggingPos - m_aDragOffset, m_pDragWin->GetSizePixel()); 1213*cdf0e10cSrcweir Update(); 1214*cdf0e10cSrcweir ShowTracking( m_aDragRect, SHOWTRACK_SMALL | SHOWTRACK_WINDOW ); 1215*cdf0e10cSrcweir 1216*cdf0e10cSrcweir return bScrolling; 1217*cdf0e10cSrcweir } 1218*cdf0e10cSrcweir 1219*cdf0e10cSrcweir //------------------------------------------------------------------------ 1220*cdf0e10cSrcweir IMPL_LINK(OJoinTableView, OnDragScrollTimer, void*, EMPTYARG) 1221*cdf0e10cSrcweir { 1222*cdf0e10cSrcweir ScrollWhileDragging(); 1223*cdf0e10cSrcweir return 0L; 1224*cdf0e10cSrcweir } 1225*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1226*cdf0e10cSrcweir void OJoinTableView::invalidateAndModify(SfxUndoAction *_pAction) 1227*cdf0e10cSrcweir { 1228*cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 1229*cdf0e10cSrcweir m_pView->getController().addUndoActionAndInvalidate(_pAction); 1230*cdf0e10cSrcweir } 1231*cdf0e10cSrcweir //------------------------------------------------------------------------ 1232*cdf0e10cSrcweir void OJoinTableView::TabWinMoved(OTableWindow* ptWhich, const Point& ptOldPosition) 1233*cdf0e10cSrcweir { 1234*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1235*cdf0e10cSrcweir Point ptThumbPos(GetHScrollBar()->GetThumbPos(), GetVScrollBar()->GetThumbPos()); 1236*cdf0e10cSrcweir ptWhich->GetData()->SetPosition(ptWhich->GetPosPixel() + ptThumbPos); 1237*cdf0e10cSrcweir 1238*cdf0e10cSrcweir invalidateAndModify(new OJoinMoveTabWinUndoAct(this, ptOldPosition, ptWhich)); 1239*cdf0e10cSrcweir } 1240*cdf0e10cSrcweir 1241*cdf0e10cSrcweir //------------------------------------------------------------------------ 1242*cdf0e10cSrcweir void OJoinTableView::TabWinSized(OTableWindow* ptWhich, const Point& ptOldPosition, const Size& szOldSize) 1243*cdf0e10cSrcweir { 1244*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1245*cdf0e10cSrcweir ptWhich->GetData()->SetSize(ptWhich->GetSizePixel()); 1246*cdf0e10cSrcweir ptWhich->GetData()->SetPosition(ptWhich->GetPosPixel()); 1247*cdf0e10cSrcweir 1248*cdf0e10cSrcweir invalidateAndModify(new OJoinSizeTabWinUndoAct(this, ptOldPosition, szOldSize, ptWhich)); 1249*cdf0e10cSrcweir } 1250*cdf0e10cSrcweir 1251*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1252*cdf0e10cSrcweir sal_Bool OJoinTableView::IsAddAllowed() 1253*cdf0e10cSrcweir { 1254*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1255*cdf0e10cSrcweir 1256*cdf0e10cSrcweir // nicht wenn Db readonly 1257*cdf0e10cSrcweir if (m_pView->getController().isReadOnly()) 1258*cdf0e10cSrcweir return sal_False; 1259*cdf0e10cSrcweir 1260*cdf0e10cSrcweir try 1261*cdf0e10cSrcweir { 1262*cdf0e10cSrcweir Reference< XConnection> xConnection = m_pView->getController().getConnection(); 1263*cdf0e10cSrcweir if(!xConnection.is()) 1264*cdf0e10cSrcweir return sal_False; 1265*cdf0e10cSrcweir // nicht wenn schon zuviele Tabellen 1266*cdf0e10cSrcweir Reference < XDatabaseMetaData > xMetaData( xConnection->getMetaData() ); 1267*cdf0e10cSrcweir 1268*cdf0e10cSrcweir sal_Int32 nMax = xMetaData.is() ? xMetaData->getMaxTablesInSelect() : 0; 1269*cdf0e10cSrcweir if (nMax && nMax <= (sal_Int32)m_aTableMap.size()) 1270*cdf0e10cSrcweir return sal_False; 1271*cdf0e10cSrcweir } 1272*cdf0e10cSrcweir catch(SQLException&) 1273*cdf0e10cSrcweir { 1274*cdf0e10cSrcweir return sal_False; 1275*cdf0e10cSrcweir } 1276*cdf0e10cSrcweir 1277*cdf0e10cSrcweir // nicht wenn keine Joins moeglich 1278*cdf0e10cSrcweir // if (!GetDatabase()->IsCapable(SDB_CAP_JOIN) && nMax <= GetTabWinCount()) 1279*cdf0e10cSrcweir // return sal_False; 1280*cdf0e10cSrcweir 1281*cdf0e10cSrcweir return sal_True; 1282*cdf0e10cSrcweir } 1283*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1284*cdf0e10cSrcweir void OJoinTableView::executePopup(const Point& _aPos,OTableConnection* _pSelConnection) 1285*cdf0e10cSrcweir { 1286*cdf0e10cSrcweir PopupMenu aContextMenu( ModuleRes( RID_MENU_JOINVIEW_CONNECTION ) ); 1287*cdf0e10cSrcweir switch (aContextMenu.Execute(this, _aPos)) 1288*cdf0e10cSrcweir { 1289*cdf0e10cSrcweir case SID_DELETE: 1290*cdf0e10cSrcweir RemoveConnection( _pSelConnection ,sal_True); 1291*cdf0e10cSrcweir break; 1292*cdf0e10cSrcweir case ID_QUERY_EDIT_JOINCONNECTION: 1293*cdf0e10cSrcweir ConnDoubleClicked( _pSelConnection ); // is the same as double clicked 1294*cdf0e10cSrcweir break; 1295*cdf0e10cSrcweir } 1296*cdf0e10cSrcweir } 1297*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1298*cdf0e10cSrcweir void OJoinTableView::Command(const CommandEvent& rEvt) 1299*cdf0e10cSrcweir { 1300*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1301*cdf0e10cSrcweir 1302*cdf0e10cSrcweir sal_Bool bHandled = sal_False; 1303*cdf0e10cSrcweir 1304*cdf0e10cSrcweir switch (rEvt.GetCommand()) 1305*cdf0e10cSrcweir { 1306*cdf0e10cSrcweir case COMMAND_CONTEXTMENU: 1307*cdf0e10cSrcweir { 1308*cdf0e10cSrcweir if( m_vTableConnection.empty() ) 1309*cdf0e10cSrcweir return; 1310*cdf0e10cSrcweir 1311*cdf0e10cSrcweir OTableConnection* pSelConnection = GetSelectedConn(); 1312*cdf0e10cSrcweir // when it wasn't a mouse event use the selected connection 1313*cdf0e10cSrcweir if (!rEvt.IsMouseEvent()) 1314*cdf0e10cSrcweir { 1315*cdf0e10cSrcweir if( pSelConnection ) 1316*cdf0e10cSrcweir { 1317*cdf0e10cSrcweir const ::std::vector<OConnectionLine*>* pLines = pSelConnection->GetConnLineList(); 1318*cdf0e10cSrcweir ::std::vector<OConnectionLine*>::const_iterator aIter = ::std::find_if(pLines->begin(),pLines->end(),::std::mem_fun(&OConnectionLine::IsValid)); 1319*cdf0e10cSrcweir if( aIter != pLines->end() ) 1320*cdf0e10cSrcweir executePopup((*aIter)->getMidPoint(),pSelConnection); 1321*cdf0e10cSrcweir } 1322*cdf0e10cSrcweir } 1323*cdf0e10cSrcweir else 1324*cdf0e10cSrcweir { 1325*cdf0e10cSrcweir DeselectConn(pSelConnection); 1326*cdf0e10cSrcweir 1327*cdf0e10cSrcweir const Point& aMousePos = rEvt.GetMousePosPixel(); 1328*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aIter = m_vTableConnection.begin(); 1329*cdf0e10cSrcweir ::std::vector<OTableConnection*>::iterator aEnd = m_vTableConnection.end(); 1330*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1331*cdf0e10cSrcweir { 1332*cdf0e10cSrcweir if( (*aIter)->CheckHit(aMousePos) ) 1333*cdf0e10cSrcweir { 1334*cdf0e10cSrcweir SelectConn(*aIter); 1335*cdf0e10cSrcweir if(!getDesignView()->getController().isReadOnly() && getDesignView()->getController().isConnected()) 1336*cdf0e10cSrcweir executePopup(rEvt.GetMousePosPixel(),*aIter); 1337*cdf0e10cSrcweir break; 1338*cdf0e10cSrcweir } 1339*cdf0e10cSrcweir } 1340*cdf0e10cSrcweir } 1341*cdf0e10cSrcweir bHandled = sal_True; 1342*cdf0e10cSrcweir } 1343*cdf0e10cSrcweir } 1344*cdf0e10cSrcweir if (!bHandled) 1345*cdf0e10cSrcweir Window::Command(rEvt); 1346*cdf0e10cSrcweir } 1347*cdf0e10cSrcweir 1348*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1349*cdf0e10cSrcweir OTableConnection* OJoinTableView::GetTabConn(const OTableWindow* pLhs,const OTableWindow* pRhs,bool _bSupressCrossOrNaturalJoin,const OTableConnection* _rpFirstAfter) const 1350*cdf0e10cSrcweir { 1351*cdf0e10cSrcweir OTableConnection* pConn = NULL; 1352*cdf0e10cSrcweir DBG_ASSERT(pRhs || pLhs, "OJoinTableView::GetTabConn : invalid args !"); 1353*cdf0e10cSrcweir // only one NULL-arg allowed 1354*cdf0e10cSrcweir 1355*cdf0e10cSrcweir if ((!pLhs || pLhs->ExistsAConn()) && (!pRhs || pRhs->ExistsAConn())) 1356*cdf0e10cSrcweir { 1357*cdf0e10cSrcweir sal_Bool bFoundStart = _rpFirstAfter ? sal_False : sal_True; 1358*cdf0e10cSrcweir 1359*cdf0e10cSrcweir ::std::vector<OTableConnection*>::const_iterator aIter = m_vTableConnection.begin(); 1360*cdf0e10cSrcweir ::std::vector<OTableConnection*>::const_iterator aEnd = m_vTableConnection.end(); 1361*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1362*cdf0e10cSrcweir { 1363*cdf0e10cSrcweir OTableConnection* pData = *aIter; 1364*cdf0e10cSrcweir 1365*cdf0e10cSrcweir if ( ( (pData->GetSourceWin() == pLhs) 1366*cdf0e10cSrcweir && ( (pData->GetDestWin() == pRhs) 1367*cdf0e10cSrcweir || (NULL == pRhs) 1368*cdf0e10cSrcweir ) 1369*cdf0e10cSrcweir ) 1370*cdf0e10cSrcweir || ( (pData->GetSourceWin() == pRhs) 1371*cdf0e10cSrcweir && ( (pData->GetDestWin() == pLhs) 1372*cdf0e10cSrcweir || (NULL == pLhs) 1373*cdf0e10cSrcweir ) 1374*cdf0e10cSrcweir ) 1375*cdf0e10cSrcweir ) 1376*cdf0e10cSrcweir { 1377*cdf0e10cSrcweir if ( _bSupressCrossOrNaturalJoin ) 1378*cdf0e10cSrcweir { 1379*cdf0e10cSrcweir if ( supressCrossNaturalJoin(pData->GetData()) ) 1380*cdf0e10cSrcweir continue; 1381*cdf0e10cSrcweir } 1382*cdf0e10cSrcweir if (bFoundStart) 1383*cdf0e10cSrcweir { 1384*cdf0e10cSrcweir pConn = pData; 1385*cdf0e10cSrcweir break; 1386*cdf0e10cSrcweir } 1387*cdf0e10cSrcweir 1388*cdf0e10cSrcweir if (!pConn) 1389*cdf0e10cSrcweir // used as fallback : if there is no conn after _rpFirstAfter the first conn between the two tables 1390*cdf0e10cSrcweir // will be used 1391*cdf0e10cSrcweir pConn = pData; 1392*cdf0e10cSrcweir 1393*cdf0e10cSrcweir if (pData == _rpFirstAfter) 1394*cdf0e10cSrcweir bFoundStart = sal_True; 1395*cdf0e10cSrcweir } 1396*cdf0e10cSrcweir } 1397*cdf0e10cSrcweir } 1398*cdf0e10cSrcweir return pConn; 1399*cdf0e10cSrcweir } 1400*cdf0e10cSrcweir 1401*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1402*cdf0e10cSrcweir long OJoinTableView::PreNotify(NotifyEvent& rNEvt) 1403*cdf0e10cSrcweir { 1404*cdf0e10cSrcweir sal_Bool bHandled = sal_False; 1405*cdf0e10cSrcweir switch (rNEvt.GetType()) 1406*cdf0e10cSrcweir { 1407*cdf0e10cSrcweir case EVENT_COMMAND: 1408*cdf0e10cSrcweir { 1409*cdf0e10cSrcweir const CommandEvent* pCommand = rNEvt.GetCommandEvent(); 1410*cdf0e10cSrcweir if (pCommand->GetCommand() == COMMAND_WHEEL) 1411*cdf0e10cSrcweir { 1412*cdf0e10cSrcweir const CommandWheelData* pData = rNEvt.GetCommandEvent()->GetWheelData(); 1413*cdf0e10cSrcweir if (pData->GetMode() == COMMAND_WHEEL_SCROLL) 1414*cdf0e10cSrcweir { 1415*cdf0e10cSrcweir if (pData->GetDelta() > 0) 1416*cdf0e10cSrcweir ScrollPane(-10 * pData->GetScrollLines(), pData->IsHorz(), sal_True); 1417*cdf0e10cSrcweir else 1418*cdf0e10cSrcweir ScrollPane(10 * pData->GetScrollLines(), pData->IsHorz(), sal_True); 1419*cdf0e10cSrcweir bHandled = sal_True; 1420*cdf0e10cSrcweir } 1421*cdf0e10cSrcweir } 1422*cdf0e10cSrcweir } 1423*cdf0e10cSrcweir break; 1424*cdf0e10cSrcweir case EVENT_KEYINPUT: 1425*cdf0e10cSrcweir { 1426*cdf0e10cSrcweir if (m_aTableMap.empty()) 1427*cdf0e10cSrcweir // no tab wins -> no conns -> no traveling 1428*cdf0e10cSrcweir break; 1429*cdf0e10cSrcweir 1430*cdf0e10cSrcweir const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent(); 1431*cdf0e10cSrcweir if (!pKeyEvent->GetKeyCode().IsMod1()) 1432*cdf0e10cSrcweir { 1433*cdf0e10cSrcweir switch (pKeyEvent->GetKeyCode().GetCode()) 1434*cdf0e10cSrcweir { 1435*cdf0e10cSrcweir case KEY_TAB: 1436*cdf0e10cSrcweir { 1437*cdf0e10cSrcweir if (!HasChildPathFocus()) 1438*cdf0e10cSrcweir break; 1439*cdf0e10cSrcweir 1440*cdf0e10cSrcweir sal_Bool bForward = !pKeyEvent->GetKeyCode().IsShift(); 1441*cdf0e10cSrcweir // is there an active tab win ? 1442*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 1443*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 1444*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1445*cdf0e10cSrcweir if (aIter->second && aIter->second->HasChildPathFocus()) 1446*cdf0e10cSrcweir break; 1447*cdf0e10cSrcweir 1448*cdf0e10cSrcweir OTableWindow* pNextWin = NULL; 1449*cdf0e10cSrcweir OTableConnection* pNextConn = NULL; 1450*cdf0e10cSrcweir 1451*cdf0e10cSrcweir if (aIter != m_aTableMap.end()) 1452*cdf0e10cSrcweir { // there is a currently active tab win 1453*cdf0e10cSrcweir // check if there is an "overflow" and we should select a conn instead of a win 1454*cdf0e10cSrcweir if (!m_vTableConnection.empty()) 1455*cdf0e10cSrcweir { 1456*cdf0e10cSrcweir if ((aIter->second == m_aTableMap.rbegin()->second) && bForward) 1457*cdf0e10cSrcweir // the last win is active and we're travelling forward -> select the first conn 1458*cdf0e10cSrcweir pNextConn = *m_vTableConnection.begin(); 1459*cdf0e10cSrcweir if ((aIter == m_aTableMap.begin()) && !bForward) 1460*cdf0e10cSrcweir // the first win is active an we're traveling backward -> select the last conn 1461*cdf0e10cSrcweir pNextConn = *m_vTableConnection.rbegin(); 1462*cdf0e10cSrcweir } 1463*cdf0e10cSrcweir 1464*cdf0e10cSrcweir if (!pNextConn) 1465*cdf0e10cSrcweir { 1466*cdf0e10cSrcweir // no conn for any reason -> select the next or previous tab win 1467*cdf0e10cSrcweir if(bForward) 1468*cdf0e10cSrcweir { 1469*cdf0e10cSrcweir if ((aIter->second == m_aTableMap.rbegin()->second)) 1470*cdf0e10cSrcweir pNextWin = m_aTableMap.begin()->second; 1471*cdf0e10cSrcweir else 1472*cdf0e10cSrcweir { 1473*cdf0e10cSrcweir ++aIter; 1474*cdf0e10cSrcweir pNextWin = aIter->second; 1475*cdf0e10cSrcweir } 1476*cdf0e10cSrcweir } 1477*cdf0e10cSrcweir else 1478*cdf0e10cSrcweir { 1479*cdf0e10cSrcweir if (aIter == m_aTableMap.begin()) 1480*cdf0e10cSrcweir pNextWin = m_aTableMap.rbegin()->second; 1481*cdf0e10cSrcweir else 1482*cdf0e10cSrcweir { 1483*cdf0e10cSrcweir --aIter; 1484*cdf0e10cSrcweir pNextWin = aIter->second; 1485*cdf0e10cSrcweir } 1486*cdf0e10cSrcweir } 1487*cdf0e10cSrcweir } 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir else 1490*cdf0e10cSrcweir { // no active tab win -> travel the connections 1491*cdf0e10cSrcweir // find the currently selected conn within the conn list 1492*cdf0e10cSrcweir sal_Int32 i(0); 1493*cdf0e10cSrcweir for ( ::std::vector<OTableConnection*>::iterator connectionIter = m_vTableConnection.begin(); 1494*cdf0e10cSrcweir connectionIter != m_vTableConnection.end(); 1495*cdf0e10cSrcweir ++connectionIter, ++i 1496*cdf0e10cSrcweir ) 1497*cdf0e10cSrcweir { 1498*cdf0e10cSrcweir if ( (*connectionIter) == GetSelectedConn() ) 1499*cdf0e10cSrcweir break; 1500*cdf0e10cSrcweir } 1501*cdf0e10cSrcweir if (i == sal_Int32(m_vTableConnection.size() - 1) && bForward) 1502*cdf0e10cSrcweir // the last conn is active and we're travelling forward -> select the first win 1503*cdf0e10cSrcweir pNextWin = m_aTableMap.begin()->second; 1504*cdf0e10cSrcweir if ((i == 0) && !bForward && !m_aTableMap.empty()) 1505*cdf0e10cSrcweir // the first conn is active and we're travelling backward -> select the last win 1506*cdf0e10cSrcweir pNextWin = m_aTableMap.rbegin()->second; 1507*cdf0e10cSrcweir 1508*cdf0e10cSrcweir if (pNextWin) 1509*cdf0e10cSrcweir DeselectConn(GetSelectedConn()); 1510*cdf0e10cSrcweir else 1511*cdf0e10cSrcweir // no win for any reason -> select the next or previous conn 1512*cdf0e10cSrcweir if (i < (sal_Int32)m_vTableConnection.size()) 1513*cdf0e10cSrcweir // there is a currently active conn 1514*cdf0e10cSrcweir pNextConn = m_vTableConnection[(i + (bForward ? 1 : m_vTableConnection.size() - 1)) % m_vTableConnection.size()]; 1515*cdf0e10cSrcweir else 1516*cdf0e10cSrcweir { // no tab win selected, no conn selected 1517*cdf0e10cSrcweir if (!m_vTableConnection.empty()) 1518*cdf0e10cSrcweir pNextConn = m_vTableConnection[bForward ? 0 : m_vTableConnection.size() - 1]; 1519*cdf0e10cSrcweir else if (!m_aTableMap.empty()) 1520*cdf0e10cSrcweir { 1521*cdf0e10cSrcweir if(bForward) 1522*cdf0e10cSrcweir pNextWin = m_aTableMap.begin()->second; 1523*cdf0e10cSrcweir else 1524*cdf0e10cSrcweir pNextWin = m_aTableMap.rbegin()->second; 1525*cdf0e10cSrcweir } 1526*cdf0e10cSrcweir } 1527*cdf0e10cSrcweir } 1528*cdf0e10cSrcweir 1529*cdf0e10cSrcweir // now select the object 1530*cdf0e10cSrcweir if (pNextWin) 1531*cdf0e10cSrcweir { 1532*cdf0e10cSrcweir if (pNextWin->GetListBox()) 1533*cdf0e10cSrcweir pNextWin->GetListBox()->GrabFocus(); 1534*cdf0e10cSrcweir else 1535*cdf0e10cSrcweir pNextWin->GrabFocus(); 1536*cdf0e10cSrcweir EnsureVisible(pNextWin); 1537*cdf0e10cSrcweir } 1538*cdf0e10cSrcweir else if (pNextConn) 1539*cdf0e10cSrcweir { 1540*cdf0e10cSrcweir GrabFocus(); 1541*cdf0e10cSrcweir // neccessary : a conn may be selected even if a tab win has the focus, in this case 1542*cdf0e10cSrcweir // the next travel would select the same conn again if we would not reset te focus ... 1543*cdf0e10cSrcweir SelectConn(pNextConn); 1544*cdf0e10cSrcweir } 1545*cdf0e10cSrcweir } 1546*cdf0e10cSrcweir break; 1547*cdf0e10cSrcweir case KEY_RETURN: 1548*cdf0e10cSrcweir { 1549*cdf0e10cSrcweir if (!pKeyEvent->GetKeyCode().IsShift() && GetSelectedConn() && HasFocus()) 1550*cdf0e10cSrcweir ConnDoubleClicked(GetSelectedConn()); 1551*cdf0e10cSrcweir break; 1552*cdf0e10cSrcweir } 1553*cdf0e10cSrcweir } 1554*cdf0e10cSrcweir } 1555*cdf0e10cSrcweir } 1556*cdf0e10cSrcweir break; 1557*cdf0e10cSrcweir case EVENT_GETFOCUS: 1558*cdf0e10cSrcweir { 1559*cdf0e10cSrcweir if (m_aTableMap.empty()) 1560*cdf0e10cSrcweir // no tab wins -> no conns -> no focus change 1561*cdf0e10cSrcweir break; 1562*cdf0e10cSrcweir Window* pSource = rNEvt.GetWindow(); 1563*cdf0e10cSrcweir if (pSource) 1564*cdf0e10cSrcweir { 1565*cdf0e10cSrcweir Window* pSearchFor = NULL; 1566*cdf0e10cSrcweir if (pSource->GetParent() == this) 1567*cdf0e10cSrcweir // it may be one of the tab wins 1568*cdf0e10cSrcweir pSearchFor = pSource; 1569*cdf0e10cSrcweir else if (pSource->GetParent() && (pSource->GetParent()->GetParent() == this)) 1570*cdf0e10cSrcweir // it may be one of th list boxes of one of the tab wins 1571*cdf0e10cSrcweir pSearchFor = pSource->GetParent(); 1572*cdf0e10cSrcweir 1573*cdf0e10cSrcweir if (pSearchFor) 1574*cdf0e10cSrcweir { 1575*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 1576*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 1577*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1578*cdf0e10cSrcweir { 1579*cdf0e10cSrcweir if (aIter->second == pSearchFor) 1580*cdf0e10cSrcweir { 1581*cdf0e10cSrcweir m_pLastFocusTabWin = aIter->second; 1582*cdf0e10cSrcweir break; 1583*cdf0e10cSrcweir } 1584*cdf0e10cSrcweir } 1585*cdf0e10cSrcweir } 1586*cdf0e10cSrcweir } 1587*cdf0e10cSrcweir } 1588*cdf0e10cSrcweir break; 1589*cdf0e10cSrcweir } 1590*cdf0e10cSrcweir 1591*cdf0e10cSrcweir if (!bHandled) 1592*cdf0e10cSrcweir return Window::PreNotify(rNEvt); 1593*cdf0e10cSrcweir return 1L; 1594*cdf0e10cSrcweir } 1595*cdf0e10cSrcweir 1596*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1597*cdf0e10cSrcweir void OJoinTableView::GrabTabWinFocus() 1598*cdf0e10cSrcweir { 1599*cdf0e10cSrcweir if (m_pLastFocusTabWin && m_pLastFocusTabWin->IsVisible()) 1600*cdf0e10cSrcweir { 1601*cdf0e10cSrcweir if (m_pLastFocusTabWin->GetListBox()) 1602*cdf0e10cSrcweir m_pLastFocusTabWin->GetListBox()->GrabFocus(); 1603*cdf0e10cSrcweir else 1604*cdf0e10cSrcweir m_pLastFocusTabWin->GrabFocus(); 1605*cdf0e10cSrcweir } 1606*cdf0e10cSrcweir else if (!m_aTableMap.empty() && m_aTableMap.begin()->second && m_aTableMap.begin()->second->IsVisible()) 1607*cdf0e10cSrcweir { 1608*cdf0e10cSrcweir OTableWindow* pFirstWin = m_aTableMap.begin()->second; 1609*cdf0e10cSrcweir if (pFirstWin->GetListBox()) 1610*cdf0e10cSrcweir pFirstWin->GetListBox()->GrabFocus(); 1611*cdf0e10cSrcweir else 1612*cdf0e10cSrcweir pFirstWin->GrabFocus(); 1613*cdf0e10cSrcweir } 1614*cdf0e10cSrcweir } 1615*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1616*cdf0e10cSrcweir void OJoinTableView::StateChanged( StateChangedType nType ) 1617*cdf0e10cSrcweir { 1618*cdf0e10cSrcweir Window::StateChanged( nType ); 1619*cdf0e10cSrcweir 1620*cdf0e10cSrcweir if ( nType == STATE_CHANGE_ZOOM ) 1621*cdf0e10cSrcweir { 1622*cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 1623*cdf0e10cSrcweir 1624*cdf0e10cSrcweir Font aFont = rStyleSettings.GetGroupFont(); 1625*cdf0e10cSrcweir if ( IsControlFont() ) 1626*cdf0e10cSrcweir aFont.Merge( GetControlFont() ); 1627*cdf0e10cSrcweir SetZoomedPointFont( aFont ); 1628*cdf0e10cSrcweir 1629*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 1630*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 1631*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1632*cdf0e10cSrcweir { 1633*cdf0e10cSrcweir aIter->second->SetZoom(GetZoom()); 1634*cdf0e10cSrcweir Size aSize(CalcZoom(aIter->second->GetSizePixel().Width()),CalcZoom(aIter->second->GetSizePixel().Height())); 1635*cdf0e10cSrcweir aIter->second->SetSizePixel(aSize); 1636*cdf0e10cSrcweir } 1637*cdf0e10cSrcweir Resize(); 1638*cdf0e10cSrcweir } 1639*cdf0e10cSrcweir } 1640*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1641*cdf0e10cSrcweir void OJoinTableView::HideTabWins() 1642*cdf0e10cSrcweir { 1643*cdf0e10cSrcweir DBG_CHKTHIS(OJoinTableView,NULL); 1644*cdf0e10cSrcweir SetUpdateMode(sal_False); 1645*cdf0e10cSrcweir 1646*cdf0e10cSrcweir OTableWindowMap* pTabWins = GetTabWinMap(); 1647*cdf0e10cSrcweir if ( pTabWins ) 1648*cdf0e10cSrcweir { 1649*cdf0e10cSrcweir // working on a copy because the real list will be cleared in inner calls 1650*cdf0e10cSrcweir OTableWindowMap aCopy(*pTabWins); 1651*cdf0e10cSrcweir OTableWindowMap::iterator aIter = aCopy.begin(); 1652*cdf0e10cSrcweir OTableWindowMap::iterator aEnd = aCopy.end(); 1653*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1654*cdf0e10cSrcweir RemoveTabWin(aIter->second); 1655*cdf0e10cSrcweir } 1656*cdf0e10cSrcweir 1657*cdf0e10cSrcweir m_pView->getController().setModified(sal_True); 1658*cdf0e10cSrcweir 1659*cdf0e10cSrcweir SetUpdateMode(sal_True); 1660*cdf0e10cSrcweir 1661*cdf0e10cSrcweir } 1662*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1663*cdf0e10cSrcweir sal_Int8 OJoinTableView::AcceptDrop( const AcceptDropEvent& /*_rEvt*/ ) 1664*cdf0e10cSrcweir { 1665*cdf0e10cSrcweir return DND_ACTION_NONE; 1666*cdf0e10cSrcweir } 1667*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1668*cdf0e10cSrcweir sal_Int8 OJoinTableView::ExecuteDrop( const ExecuteDropEvent& /*_rEvt*/ ) 1669*cdf0e10cSrcweir { 1670*cdf0e10cSrcweir return DND_ACTION_NONE; 1671*cdf0e10cSrcweir } 1672*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1673*cdf0e10cSrcweir void OJoinTableView::dragFinished( ) 1674*cdf0e10cSrcweir { 1675*cdf0e10cSrcweir } 1676*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1677*cdf0e10cSrcweir void OJoinTableView::StartDrag( sal_Int8 /*nAction*/, const Point& /*rPosPixel*/ ) 1678*cdf0e10cSrcweir { 1679*cdf0e10cSrcweir } 1680*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1681*cdf0e10cSrcweir void OJoinTableView::clearLayoutInformation() 1682*cdf0e10cSrcweir { 1683*cdf0e10cSrcweir m_pLastFocusTabWin = NULL; 1684*cdf0e10cSrcweir m_pSelectedConn = NULL; 1685*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1686*cdf0e10cSrcweir // Listen loeschen 1687*cdf0e10cSrcweir OTableWindowMapIterator aIter = m_aTableMap.begin(); 1688*cdf0e10cSrcweir OTableWindowMapIterator aEnd = m_aTableMap.end(); 1689*cdf0e10cSrcweir for(;aIter != aEnd;++aIter) 1690*cdf0e10cSrcweir { 1691*cdf0e10cSrcweir if ( aIter->second ) 1692*cdf0e10cSrcweir aIter->second->clearListBox(); 1693*cdf0e10cSrcweir ::std::auto_ptr<Window> aTemp(aIter->second); 1694*cdf0e10cSrcweir aIter->second = NULL; 1695*cdf0e10cSrcweir } 1696*cdf0e10cSrcweir 1697*cdf0e10cSrcweir m_aTableMap.clear(); 1698*cdf0e10cSrcweir 1699*cdf0e10cSrcweir ::std::vector<OTableConnection*>::const_iterator aIter2 = m_vTableConnection.begin(); 1700*cdf0e10cSrcweir ::std::vector<OTableConnection*>::const_iterator aEnd2 = m_vTableConnection.end(); 1701*cdf0e10cSrcweir for(;aIter2 != aEnd2;++aIter2) 1702*cdf0e10cSrcweir delete *aIter2; 1703*cdf0e10cSrcweir 1704*cdf0e10cSrcweir m_vTableConnection.clear(); 1705*cdf0e10cSrcweir } 1706*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1707*cdf0e10cSrcweir void OJoinTableView::lookForUiActivities() 1708*cdf0e10cSrcweir { 1709*cdf0e10cSrcweir } 1710*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1711*cdf0e10cSrcweir void OJoinTableView::LoseFocus() 1712*cdf0e10cSrcweir { 1713*cdf0e10cSrcweir DeselectConn(GetSelectedConn()); 1714*cdf0e10cSrcweir Window::LoseFocus(); 1715*cdf0e10cSrcweir } 1716*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1717*cdf0e10cSrcweir void OJoinTableView::GetFocus() 1718*cdf0e10cSrcweir { 1719*cdf0e10cSrcweir Window::GetFocus(); 1720*cdf0e10cSrcweir if ( !m_aTableMap.empty() && !GetSelectedConn() ) 1721*cdf0e10cSrcweir GrabTabWinFocus(); 1722*cdf0e10cSrcweir } 1723*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1724*cdf0e10cSrcweir Reference< XAccessible > OJoinTableView::CreateAccessible() 1725*cdf0e10cSrcweir { 1726*cdf0e10cSrcweir m_pAccessible = new OJoinDesignViewAccess(this); 1727*cdf0e10cSrcweir return m_pAccessible; 1728*cdf0e10cSrcweir } 1729*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1730*cdf0e10cSrcweir void OJoinTableView::modified() 1731*cdf0e10cSrcweir { 1732*cdf0e10cSrcweir OJoinController& rController = m_pView->getController(); 1733*cdf0e10cSrcweir rController.setModified( sal_True ); 1734*cdf0e10cSrcweir rController.InvalidateFeature(ID_BROWSER_ADDTABLE); 1735*cdf0e10cSrcweir rController.InvalidateFeature(SID_RELATION_ADD_RELATION); 1736*cdf0e10cSrcweir } 1737*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1738*cdf0e10cSrcweir void OJoinTableView::addConnection(OTableConnection* _pConnection,sal_Bool _bAddData) 1739*cdf0e10cSrcweir { 1740*cdf0e10cSrcweir if ( _bAddData ) 1741*cdf0e10cSrcweir { 1742*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 0 1743*cdf0e10cSrcweir TTableConnectionData* pTabConnDataList = m_pView->getController().getTableConnectionData(); 1744*cdf0e10cSrcweir OSL_ENSURE( ::std::find(pTabConnDataList->begin(),pTabConnDataList->end(),_pConnection->GetData()) == pTabConnDataList->end(),"Data already in vector!"); 1745*cdf0e10cSrcweir #endif 1746*cdf0e10cSrcweir m_pView->getController().getTableConnectionData()->push_back(_pConnection->GetData()); 1747*cdf0e10cSrcweir } 1748*cdf0e10cSrcweir m_vTableConnection.push_back(_pConnection); 1749*cdf0e10cSrcweir _pConnection->RecalcLines(); 1750*cdf0e10cSrcweir _pConnection->InvalidateConnection(); 1751*cdf0e10cSrcweir 1752*cdf0e10cSrcweir modified(); 1753*cdf0e10cSrcweir if ( m_pAccessible ) 1754*cdf0e10cSrcweir m_pAccessible->notifyAccessibleEvent( AccessibleEventId::CHILD, 1755*cdf0e10cSrcweir Any(), 1756*cdf0e10cSrcweir makeAny(_pConnection->GetAccessible())); 1757*cdf0e10cSrcweir } 1758*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1759*cdf0e10cSrcweir bool OJoinTableView::allowQueries() const 1760*cdf0e10cSrcweir { 1761*cdf0e10cSrcweir return true; 1762*cdf0e10cSrcweir } 1763*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1764*cdf0e10cSrcweir void OJoinTableView::onNoColumns_throw() 1765*cdf0e10cSrcweir { 1766*cdf0e10cSrcweir OSL_ENSURE( false, "OTableWindow::onNoColumns_throw: cannot really handle this!" ); 1767*cdf0e10cSrcweir throw SQLException(); 1768*cdf0e10cSrcweir } 1769*cdf0e10cSrcweir //------------------------------------------------------------------------------ 1770*cdf0e10cSrcweir bool OJoinTableView::supressCrossNaturalJoin(const TTableConnectionData::value_type& ) const 1771*cdf0e10cSrcweir { 1772*cdf0e10cSrcweir return false; 1773*cdf0e10cSrcweir } 1774