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_TABLEWINDOW_HXX 31*cdf0e10cSrcweir #include "TableWindow.hxx" 32*cdf0e10cSrcweir #endif 33*cdf0e10cSrcweir #ifndef DBAUI_TABLEWINDOWLISTBOX_HXX 34*cdf0e10cSrcweir #include "TableWindowListBox.hxx" 35*cdf0e10cSrcweir #endif 36*cdf0e10cSrcweir #ifndef DBAUI_QUERYTABLEVIEW_HXX 37*cdf0e10cSrcweir #include "QueryTableView.hxx" 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #ifndef DBAUI_QUERYDESIGNVIEW_HXX 40*cdf0e10cSrcweir #include "QueryDesignView.hxx" 41*cdf0e10cSrcweir #endif 42*cdf0e10cSrcweir #ifndef DBAUI_TABLEWINDOWDATA_HXX 43*cdf0e10cSrcweir #include "TableWindowData.hxx" 44*cdf0e10cSrcweir #endif 45*cdf0e10cSrcweir #ifndef DBACCESS_IMAGEPROVIDER_HXX 46*cdf0e10cSrcweir #include "imageprovider.hxx" 47*cdf0e10cSrcweir #endif 48*cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX 49*cdf0e10cSrcweir #include <tools/debug.hxx> 50*cdf0e10cSrcweir #endif 51*cdf0e10cSrcweir #ifndef TOOLS_DIAGNOSE_EX_H 52*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 53*cdf0e10cSrcweir #endif 54*cdf0e10cSrcweir #ifndef _SV_SVAPP_HXX 55*cdf0e10cSrcweir #include <vcl/svapp.hxx> 56*cdf0e10cSrcweir #endif 57*cdf0e10cSrcweir #ifndef _SV_WALL_HXX 58*cdf0e10cSrcweir #include <vcl/wall.hxx> 59*cdf0e10cSrcweir #endif 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 62*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 63*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 64*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp> 65*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp> 66*cdf0e10cSrcweir #include "querycontroller.hxx" 67*cdf0e10cSrcweir #include "dbu_qry.hrc" 68*cdf0e10cSrcweir #include "dbustrings.hrc" 69*cdf0e10cSrcweir #include "Query.hrc" 70*cdf0e10cSrcweir #include <comphelper/extract.hxx> 71*cdf0e10cSrcweir #include "UITools.hxx" 72*cdf0e10cSrcweir #include "TableWindowAccess.hxx" 73*cdf0e10cSrcweir #include "browserids.hxx" 74*cdf0e10cSrcweir #include <connectivity/dbtools.hxx> 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir using namespace dbaui; 78*cdf0e10cSrcweir using namespace ::utl; 79*cdf0e10cSrcweir using namespace ::com::sun::star; 80*cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 81*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 82*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 83*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 84*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 85*cdf0e10cSrcweir using namespace ::com::sun::star::container; 86*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 87*cdf0e10cSrcweir using namespace ::com::sun::star::accessibility; 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir #define TABWIN_SIZING_AREA 4 90*cdf0e10cSrcweir #define LISTBOX_SCROLLING_AREA 6 91*cdf0e10cSrcweir #define SCROLLING_TIMESPAN 500 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir #define TABWIN_WIDTH_MIN 90 94*cdf0e10cSrcweir #define TABWIN_HEIGHT_MIN 80 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir //======================================================================== 97*cdf0e10cSrcweir // class OTableWindow 98*cdf0e10cSrcweir //======================================================================== 99*cdf0e10cSrcweir DBG_NAME(OTableWindow) 100*cdf0e10cSrcweir //------------------------------------------------------------------------------ 101*cdf0e10cSrcweir OTableWindow::OTableWindow( Window* pParent, const TTableWindowData::value_type& pTabWinData ) 102*cdf0e10cSrcweir : ::comphelper::OContainerListener(m_aMutex) 103*cdf0e10cSrcweir ,Window( pParent, WB_3DLOOK|WB_MOVEABLE ) 104*cdf0e10cSrcweir ,m_aTypeImage( this ) 105*cdf0e10cSrcweir ,m_aTitle( this ) 106*cdf0e10cSrcweir ,m_pListBox(NULL) 107*cdf0e10cSrcweir ,m_pAccessible(NULL) 108*cdf0e10cSrcweir ,m_pData( pTabWinData ) 109*cdf0e10cSrcweir ,m_nMoveCount(0) 110*cdf0e10cSrcweir ,m_nMoveIncrement(1) 111*cdf0e10cSrcweir ,m_nSizingFlags( SIZING_NONE ) 112*cdf0e10cSrcweir ,m_bActive( sal_False ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir DBG_CTOR(OTableWindow,NULL); 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir // Position und Groesse bestimmen 117*cdf0e10cSrcweir if( GetData()->HasPosition() ) 118*cdf0e10cSrcweir SetPosPixel( GetData()->GetPosition() ); 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir if( GetData()->HasSize() ) 121*cdf0e10cSrcweir SetSizePixel( GetData()->GetSize() ); 122*cdf0e10cSrcweir 123*cdf0e10cSrcweir // Hintergrund setzen 124*cdf0e10cSrcweir const StyleSettings& aSystemStyle = Application::GetSettings().GetStyleSettings(); 125*cdf0e10cSrcweir SetBackground(Wallpaper(aSystemStyle.GetFaceColor())); 126*cdf0e10cSrcweir // und Textfarbe (obwohl ich eigentlich keinen Text habe, aber wer weiss, was 127*cdf0e10cSrcweir // abgeleitete Klassen machen) 128*cdf0e10cSrcweir SetTextColor(aSystemStyle.GetButtonTextColor()); 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir EnableClipSiblings(); 131*cdf0e10cSrcweir } 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir //------------------------------------------------------------------------------ 134*cdf0e10cSrcweir OTableWindow::~OTableWindow() 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir DBG_DTOR(OTableWindow,NULL); 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir if (m_pListBox) 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir OSL_ENSURE(m_pListBox->GetEntryCount()==0,"Forgot to call EmptyListbox()!"); 141*cdf0e10cSrcweir ::std::auto_ptr<Window> aTemp(m_pListBox); 142*cdf0e10cSrcweir m_pListBox = NULL; 143*cdf0e10cSrcweir } // if (m_pListBox) 144*cdf0e10cSrcweir if ( m_pContainerListener.is() ) 145*cdf0e10cSrcweir m_pContainerListener->dispose(); 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir m_pAccessible = NULL; 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 150*cdf0e10cSrcweir const OJoinTableView* OTableWindow::getTableView() const 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir OSL_ENSURE(static_cast<OJoinTableView*>(GetParent()),"No OJoinTableView!"); 153*cdf0e10cSrcweir return static_cast<OJoinTableView*>(GetParent()); 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 156*cdf0e10cSrcweir OJoinTableView* OTableWindow::getTableView() 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir OSL_ENSURE(static_cast<OJoinTableView*>(GetParent()),"No OJoinTableView!"); 159*cdf0e10cSrcweir return static_cast<OJoinTableView*>(GetParent()); 160*cdf0e10cSrcweir } 161*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 162*cdf0e10cSrcweir OJoinDesignView* OTableWindow::getDesignView() 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir OSL_ENSURE(static_cast<OJoinDesignView*>(GetParent()->GetParent()->GetParent()),"No OJoinDesignView!"); 165*cdf0e10cSrcweir return static_cast<OJoinDesignView*>(GetParent()->GetParent()->GetParent()); 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir //------------------------------------------------------------------------------ 168*cdf0e10cSrcweir void OTableWindow::SetPosPixel( const Point& rNewPos ) 169*cdf0e10cSrcweir { 170*cdf0e10cSrcweir Point aNewPosData = rNewPos + getTableView()->GetScrollOffset(); 171*cdf0e10cSrcweir GetData()->SetPosition( aNewPosData ); 172*cdf0e10cSrcweir Window::SetPosPixel( rNewPos ); 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir //------------------------------------------------------------------------------ 176*cdf0e10cSrcweir void OTableWindow::SetSizePixel( const Size& rNewSize ) 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir Size aOutSize(rNewSize); 179*cdf0e10cSrcweir if( aOutSize.Width() < TABWIN_WIDTH_MIN ) 180*cdf0e10cSrcweir aOutSize.Width() = TABWIN_WIDTH_MIN; 181*cdf0e10cSrcweir if( aOutSize.Height() < TABWIN_HEIGHT_MIN ) 182*cdf0e10cSrcweir aOutSize.Height() = TABWIN_HEIGHT_MIN; 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir GetData()->SetSize( aOutSize ); 185*cdf0e10cSrcweir Window::SetSizePixel( aOutSize ); 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir //------------------------------------------------------------------------------ 188*cdf0e10cSrcweir void OTableWindow::SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir SetPosPixel( rNewPos ); 191*cdf0e10cSrcweir SetSizePixel( rNewSize ); 192*cdf0e10cSrcweir } 193*cdf0e10cSrcweir //------------------------------------------------------------------------------ 194*cdf0e10cSrcweir OTableWindowListBox* OTableWindow::CreateListBox() 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir return new OTableWindowListBox(this); 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir //------------------------------------------------------------------------------ 200*cdf0e10cSrcweir sal_Bool OTableWindow::FillListBox() 201*cdf0e10cSrcweir { 202*cdf0e10cSrcweir m_pListBox->Clear(); 203*cdf0e10cSrcweir if ( !m_pContainerListener.is() ) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir Reference< XContainer> xContainer(m_pData->getColumns(),UNO_QUERY); 206*cdf0e10cSrcweir if ( xContainer.is() ) 207*cdf0e10cSrcweir m_pContainerListener = new ::comphelper::OContainerListenerAdapter(this,xContainer); 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir // mark all primary keys with special image 210*cdf0e10cSrcweir ModuleRes TmpRes(isHiContrast(m_pListBox) ? IMG_JOINS_H : IMG_JOINS); 211*cdf0e10cSrcweir ImageList aImageList(TmpRes); 212*cdf0e10cSrcweir Image aPrimKeyImage = aImageList.GetImage(IMG_PRIMARY_KEY); 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir if (GetData()->IsShowAll()) 215*cdf0e10cSrcweir { 216*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_pListBox->InsertEntry( ::rtl::OUString::createFromAscii("*") ); 217*cdf0e10cSrcweir pEntry->SetUserData( createUserData(NULL,false) ); 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir Reference<XNameAccess> xPKeyColumns; 221*cdf0e10cSrcweir try 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir xPKeyColumns = dbtools::getPrimaryKeyColumns_throw(m_pData->getTable()); 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir catch(Exception&) 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir OSL_ENSURE(0,"Exception occured!"); 228*cdf0e10cSrcweir } 229*cdf0e10cSrcweir try 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir Reference< XNameAccess > xColumns = m_pData->getColumns(); 232*cdf0e10cSrcweir if( xColumns.is() ) 233*cdf0e10cSrcweir { 234*cdf0e10cSrcweir Sequence< ::rtl::OUString> aColumns = xColumns->getElementNames(); 235*cdf0e10cSrcweir const ::rtl::OUString* pIter = aColumns.getConstArray(); 236*cdf0e10cSrcweir const ::rtl::OUString* pEnd = pIter + aColumns.getLength(); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir SvLBoxEntry* pEntry = NULL; 239*cdf0e10cSrcweir for (; pIter != pEnd; ++pIter) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir bool bPrimaryKeyColumn = xPKeyColumns.is() && xPKeyColumns->hasByName( *pIter ); 242*cdf0e10cSrcweir // is this column in the primary key 243*cdf0e10cSrcweir if ( bPrimaryKeyColumn ) 244*cdf0e10cSrcweir pEntry = m_pListBox->InsertEntry(*pIter, aPrimKeyImage, aPrimKeyImage); 245*cdf0e10cSrcweir else 246*cdf0e10cSrcweir pEntry = m_pListBox->InsertEntry(*pIter); 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir Reference<XPropertySet> xColumn(xColumns->getByName(*pIter),UNO_QUERY); 249*cdf0e10cSrcweir if ( xColumn.is() ) 250*cdf0e10cSrcweir pEntry->SetUserData( createUserData(xColumn,bPrimaryKeyColumn) ); 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir catch(Exception&) 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir OSL_ENSURE(0,"Exception occured!"); 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir return sal_True; 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 262*cdf0e10cSrcweir void* OTableWindow::createUserData(const Reference< XPropertySet>& /*_xColumn*/,bool /*_bPrimaryKey*/) 263*cdf0e10cSrcweir { 264*cdf0e10cSrcweir return NULL; 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 267*cdf0e10cSrcweir void OTableWindow::deleteUserData(void*& _pUserData) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir OSL_ENSURE(!_pUserData,"INVALID call. Need to delete the userclass!"); 270*cdf0e10cSrcweir _pUserData = NULL; 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir //------------------------------------------------------------------------------ 273*cdf0e10cSrcweir void OTableWindow::clearListBox() 274*cdf0e10cSrcweir { 275*cdf0e10cSrcweir if ( m_pListBox ) 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir SvLBoxEntry* pEntry = m_pListBox->First(); 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir while(pEntry) 280*cdf0e10cSrcweir { 281*cdf0e10cSrcweir void* pUserData = pEntry->GetUserData(); 282*cdf0e10cSrcweir deleteUserData(pUserData); 283*cdf0e10cSrcweir SvLBoxEntry* pNextEntry = m_pListBox->Next(pEntry); 284*cdf0e10cSrcweir m_pListBox->GetModel()->Remove(pEntry); 285*cdf0e10cSrcweir pEntry = pNextEntry; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir //------------------------------------------------------------------------------ 291*cdf0e10cSrcweir void OTableWindow::impl_updateImage() 292*cdf0e10cSrcweir { 293*cdf0e10cSrcweir ImageProvider aImageProvider( getDesignView()->getController().getConnection() ); 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir Image aImage, aImageHC; 296*cdf0e10cSrcweir aImageProvider.getImages( GetComposedName(), m_pData->isQuery() ? DatabaseObject::QUERY : DatabaseObject::TABLE, aImage, aImageHC ); 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir if ( !aImage || !aImageHC ) 299*cdf0e10cSrcweir { 300*cdf0e10cSrcweir OSL_ENSURE( false, "OTableWindow::impl_updateImage: no images!" ); 301*cdf0e10cSrcweir return; 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir m_aTypeImage.SetModeImage( aImage, BMP_COLOR_NORMAL ); 305*cdf0e10cSrcweir m_aTypeImage.SetModeImage( aImageHC, BMP_COLOR_HIGHCONTRAST ); 306*cdf0e10cSrcweir m_aTypeImage.Show(); 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir //------------------------------------------------------------------------------ 310*cdf0e10cSrcweir sal_Bool OTableWindow::Init() 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir // create list box if necessary 313*cdf0e10cSrcweir if ( !m_pListBox ) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir m_pListBox = CreateListBox(); 316*cdf0e10cSrcweir DBG_ASSERT( m_pListBox != NULL, "OTableWindow::Init() : CreateListBox hat NULL geliefert !" ); 317*cdf0e10cSrcweir m_pListBox->SetSelectionMode( MULTIPLE_SELECTION ); 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir // Titel setzen 321*cdf0e10cSrcweir m_aTitle.SetText( m_pData->GetWinName() ); 322*cdf0e10cSrcweir m_aTitle.Show(); 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir m_pListBox->Show(); 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir // die Felder in die ListBox eintragen 327*cdf0e10cSrcweir clearListBox(); 328*cdf0e10cSrcweir sal_Bool bSuccess = FillListBox(); 329*cdf0e10cSrcweir if ( bSuccess ) 330*cdf0e10cSrcweir m_pListBox->SelectAll( sal_False ); 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir impl_updateImage(); 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir return bSuccess; 335*cdf0e10cSrcweir } 336*cdf0e10cSrcweir //------------------------------------------------------------------------------ 337*cdf0e10cSrcweir void OTableWindow::DataChanged(const DataChangedEvent& rDCEvt) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir if (rDCEvt.GetType() == DATACHANGED_SETTINGS) 340*cdf0e10cSrcweir { 341*cdf0e10cSrcweir // nehmen wir den worst-case an : die Farben haben sich geaendert, also 342*cdf0e10cSrcweir // mich anpassen 343*cdf0e10cSrcweir const StyleSettings& aSystemStyle = Application::GetSettings().GetStyleSettings(); 344*cdf0e10cSrcweir SetBackground(Wallpaper(Color(aSystemStyle.GetFaceColor()))); 345*cdf0e10cSrcweir SetTextColor(aSystemStyle.GetButtonTextColor()); 346*cdf0e10cSrcweir } 347*cdf0e10cSrcweir } 348*cdf0e10cSrcweir //------------------------------------------------------------------------------ 349*cdf0e10cSrcweir void OTableWindow::Paint( const Rectangle& rRect ) 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir Rectangle aRect( Point(0,0), GetOutputSizePixel() ); 352*cdf0e10cSrcweir Window::Paint( rRect ); 353*cdf0e10cSrcweir Draw3DBorder( aRect ); 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir //------------------------------------------------------------------------------ 357*cdf0e10cSrcweir void OTableWindow::Draw3DBorder(const Rectangle& rRect) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir // die Style-Settings des Systems fuer meine Farben 360*cdf0e10cSrcweir const StyleSettings& aSystemStyle = Application::GetSettings().GetStyleSettings(); 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir // Schwarze Linie unten und rechts 363*cdf0e10cSrcweir SetLineColor(aSystemStyle.GetDarkShadowColor()); 364*cdf0e10cSrcweir DrawLine( rRect.BottomLeft(), rRect.BottomRight() ); 365*cdf0e10cSrcweir DrawLine( rRect.BottomRight(), rRect.TopRight() ); 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir // Dunkelgraue Linie ueber der schwarzen 368*cdf0e10cSrcweir SetLineColor(aSystemStyle.GetShadowColor()); 369*cdf0e10cSrcweir Point aEHvector(1,1); 370*cdf0e10cSrcweir DrawLine( rRect.BottomLeft()+Point(1,-1), rRect.BottomRight() - aEHvector ); 371*cdf0e10cSrcweir DrawLine( rRect.BottomRight() - aEHvector, rRect.TopRight()+Point(-1,1) ); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir // Hellgraue Linie links und oben 374*cdf0e10cSrcweir SetLineColor(aSystemStyle.GetLightColor()); 375*cdf0e10cSrcweir DrawLine( rRect.BottomLeft()+Point(1,-2), rRect.TopLeft() + aEHvector ); 376*cdf0e10cSrcweir DrawLine( rRect.TopLeft() + aEHvector, rRect.TopRight()+Point(-2,1) ); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 379*cdf0e10cSrcweir Rectangle OTableWindow::getSizingRect(const Point& _rPos,const Size& _rOutputSize) const 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir Rectangle aSizingRect = Rectangle( GetPosPixel(), GetSizePixel() ); 382*cdf0e10cSrcweir sal_uInt16 nSizingFlags = GetSizingFlags(); 383*cdf0e10cSrcweir 384*cdf0e10cSrcweir if( nSizingFlags & SIZING_TOP ) 385*cdf0e10cSrcweir { 386*cdf0e10cSrcweir if( _rPos.Y() < 0 ) 387*cdf0e10cSrcweir aSizingRect.Top() = 0; 388*cdf0e10cSrcweir else 389*cdf0e10cSrcweir aSizingRect.Top() = _rPos.Y(); 390*cdf0e10cSrcweir } 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir if( nSizingFlags & SIZING_BOTTOM ) 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir if( _rPos.Y() > _rOutputSize.Height() ) 395*cdf0e10cSrcweir aSizingRect.Bottom() = _rOutputSize.Height(); 396*cdf0e10cSrcweir else 397*cdf0e10cSrcweir aSizingRect.Bottom() = _rPos.Y(); 398*cdf0e10cSrcweir } 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir if( nSizingFlags & SIZING_RIGHT ) 402*cdf0e10cSrcweir { 403*cdf0e10cSrcweir if( _rPos.X() > _rOutputSize.Width() ) 404*cdf0e10cSrcweir aSizingRect.Right() = _rOutputSize.Width(); 405*cdf0e10cSrcweir else 406*cdf0e10cSrcweir aSizingRect.Right() = _rPos.X(); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir if( nSizingFlags & SIZING_LEFT ) 410*cdf0e10cSrcweir { 411*cdf0e10cSrcweir if( _rPos.X() < 0 ) 412*cdf0e10cSrcweir aSizingRect.Left() = 0; 413*cdf0e10cSrcweir else 414*cdf0e10cSrcweir aSizingRect.Left() = _rPos.X(); 415*cdf0e10cSrcweir } 416*cdf0e10cSrcweir return aSizingRect; 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 419*cdf0e10cSrcweir void OTableWindow::setSizingFlag(const Point& _rPos) 420*cdf0e10cSrcweir { 421*cdf0e10cSrcweir Size aOutSize = GetOutputSizePixel(); 422*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 423*cdf0e10cSrcweir // Flags anpassen, wenn Mauszeiger in sizingArea 424*cdf0e10cSrcweir m_nSizingFlags = SIZING_NONE; 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir if( _rPos.X() < TABWIN_SIZING_AREA ) 427*cdf0e10cSrcweir m_nSizingFlags |= SIZING_LEFT; 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir if( _rPos.Y() < TABWIN_SIZING_AREA ) 430*cdf0e10cSrcweir m_nSizingFlags |= SIZING_TOP; 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir if( _rPos.X() > aOutSize.Width()-TABWIN_SIZING_AREA ) 433*cdf0e10cSrcweir m_nSizingFlags |= SIZING_RIGHT; 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir if( _rPos.Y() > aOutSize.Height()-TABWIN_SIZING_AREA ) 436*cdf0e10cSrcweir m_nSizingFlags |= SIZING_BOTTOM; 437*cdf0e10cSrcweir } 438*cdf0e10cSrcweir //------------------------------------------------------------------------------ 439*cdf0e10cSrcweir void OTableWindow::MouseMove( const MouseEvent& rEvt ) 440*cdf0e10cSrcweir { 441*cdf0e10cSrcweir Window::MouseMove(rEvt); 442*cdf0e10cSrcweir 443*cdf0e10cSrcweir OJoinTableView* pCont = getTableView(); 444*cdf0e10cSrcweir if (pCont->getDesignView()->getController().isReadOnly()) 445*cdf0e10cSrcweir return; 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir Point aPos = rEvt.GetPosPixel(); 448*cdf0e10cSrcweir setSizingFlag(aPos); 449*cdf0e10cSrcweir Pointer aPointer; 450*cdf0e10cSrcweir 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 453*cdf0e10cSrcweir // Mauszeiger anpassen, wenn Mauszeiger in sizingArea 454*cdf0e10cSrcweir switch( m_nSizingFlags ) 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir case SIZING_TOP: 457*cdf0e10cSrcweir case SIZING_BOTTOM: 458*cdf0e10cSrcweir aPointer = Pointer( POINTER_SSIZE ); 459*cdf0e10cSrcweir break; 460*cdf0e10cSrcweir 461*cdf0e10cSrcweir case SIZING_LEFT: 462*cdf0e10cSrcweir case SIZING_RIGHT: 463*cdf0e10cSrcweir aPointer = Pointer( POINTER_ESIZE ); 464*cdf0e10cSrcweir break; 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir case SIZING_LEFT+SIZING_TOP: 467*cdf0e10cSrcweir case SIZING_RIGHT+SIZING_BOTTOM: 468*cdf0e10cSrcweir aPointer = Pointer( POINTER_SESIZE ); 469*cdf0e10cSrcweir break; 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir case SIZING_RIGHT+SIZING_TOP: 472*cdf0e10cSrcweir case SIZING_LEFT+SIZING_BOTTOM: 473*cdf0e10cSrcweir aPointer = Pointer( POINTER_NESIZE ); 474*cdf0e10cSrcweir break; 475*cdf0e10cSrcweir } 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir SetPointer( aPointer ); 478*cdf0e10cSrcweir } 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir //------------------------------------------------------------------------------ 481*cdf0e10cSrcweir void OTableWindow::MouseButtonDown( const MouseEvent& rEvt ) 482*cdf0e10cSrcweir { 483*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 484*cdf0e10cSrcweir // Wenn sizing, dann bekommt Parent die Nachricht, 485*cdf0e10cSrcweir // dass jetzt die Fenstergroesse seines Childs veraendert wird 486*cdf0e10cSrcweir if( m_nSizingFlags ) 487*cdf0e10cSrcweir getTableView()->BeginChildSizing( this, GetPointer() ); 488*cdf0e10cSrcweir 489*cdf0e10cSrcweir Window::MouseButtonDown( rEvt ); 490*cdf0e10cSrcweir } 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir //------------------------------------------------------------------------------ 495*cdf0e10cSrcweir void OTableWindow::Resize() 496*cdf0e10cSrcweir { 497*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 498*cdf0e10cSrcweir // Das Fenster darf nicht verschwinden, deshalb min. Groesse setzen 499*cdf0e10cSrcweir Size aOutSize = GetOutputSizePixel(); 500*cdf0e10cSrcweir aOutSize = Size(CalcZoom(aOutSize.Width()),CalcZoom(aOutSize.Height())); 501*cdf0e10cSrcweir 502*cdf0e10cSrcweir long nTitleHeight = CalcZoom( GetTextHeight() )+ CalcZoom( 4 ); 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 505*cdf0e10cSrcweir // Titel und ListBox anpassen 506*cdf0e10cSrcweir long n5Pos = CalcZoom(5); 507*cdf0e10cSrcweir long nPositionX = n5Pos; 508*cdf0e10cSrcweir long nPositionY = n5Pos; 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir // position the image which indicates the type 511*cdf0e10cSrcweir m_aTypeImage.SetPosPixel( Point( nPositionX, nPositionY ) ); 512*cdf0e10cSrcweir Size aImageSize( m_aTypeImage.GetImage().GetSizePixel() ); 513*cdf0e10cSrcweir m_aTypeImage.SetSizePixel( aImageSize ); 514*cdf0e10cSrcweir 515*cdf0e10cSrcweir if ( nTitleHeight < aImageSize.Height() ) 516*cdf0e10cSrcweir nTitleHeight = aImageSize.Height(); 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir nPositionX += aImageSize.Width() + CalcZoom( 2 ); 519*cdf0e10cSrcweir m_aTitle.SetPosSizePixel( Point( nPositionX, nPositionY ), Size( aOutSize.Width() - nPositionX - n5Pos, nTitleHeight ) ); 520*cdf0e10cSrcweir 521*cdf0e10cSrcweir long nTitleToList = CalcZoom( 3 ); 522*cdf0e10cSrcweir 523*cdf0e10cSrcweir m_pListBox->SetPosSizePixel( 524*cdf0e10cSrcweir Point( n5Pos, nPositionY + nTitleHeight + nTitleToList ), 525*cdf0e10cSrcweir Size( aOutSize.Width() - 2 * n5Pos, aOutSize.Height() - ( nPositionY + nTitleHeight + nTitleToList ) - n5Pos ) 526*cdf0e10cSrcweir ); 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir Window::Invalidate(); 529*cdf0e10cSrcweir } 530*cdf0e10cSrcweir 531*cdf0e10cSrcweir //------------------------------------------------------------------------------ 532*cdf0e10cSrcweir void OTableWindow::SetBoldTitle( sal_Bool bBold ) 533*cdf0e10cSrcweir { 534*cdf0e10cSrcweir Font aFont = m_aTitle.GetFont(); 535*cdf0e10cSrcweir aFont.SetWeight( bBold?WEIGHT_BOLD:WEIGHT_NORMAL ); 536*cdf0e10cSrcweir m_aTitle.SetFont( aFont ); 537*cdf0e10cSrcweir m_aTitle.Invalidate(); 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir 540*cdf0e10cSrcweir //------------------------------------------------------------------------------ 541*cdf0e10cSrcweir void OTableWindow::GetFocus() 542*cdf0e10cSrcweir { 543*cdf0e10cSrcweir Window::GetFocus(); 544*cdf0e10cSrcweir // we have to forward the focus to our listbox to enable keystokes 545*cdf0e10cSrcweir if(m_pListBox) 546*cdf0e10cSrcweir m_pListBox->GrabFocus(); 547*cdf0e10cSrcweir } 548*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 549*cdf0e10cSrcweir void OTableWindow::setActive(sal_Bool _bActive) 550*cdf0e10cSrcweir { 551*cdf0e10cSrcweir SetBoldTitle( _bActive ); 552*cdf0e10cSrcweir m_bActive = _bActive; 553*cdf0e10cSrcweir if (!_bActive && m_pListBox && m_pListBox->GetSelectionCount() != 0) 554*cdf0e10cSrcweir m_pListBox->SelectAll(sal_False); 555*cdf0e10cSrcweir } 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir //------------------------------------------------------------------------------ 558*cdf0e10cSrcweir void OTableWindow::Remove() 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////// 561*cdf0e10cSrcweir // Fenster loeschen 562*cdf0e10cSrcweir OJoinTableView* pTabWinCont = getTableView(); 563*cdf0e10cSrcweir pTabWinCont->RemoveTabWin( this ); 564*cdf0e10cSrcweir pTabWinCont->Invalidate(); 565*cdf0e10cSrcweir } 566*cdf0e10cSrcweir //------------------------------------------------------------------------------ 567*cdf0e10cSrcweir sal_Bool OTableWindow::HandleKeyInput( const KeyEvent& rEvt ) 568*cdf0e10cSrcweir { 569*cdf0e10cSrcweir const KeyCode& rCode = rEvt.GetKeyCode(); 570*cdf0e10cSrcweir sal_uInt16 nCode = rCode.GetCode(); 571*cdf0e10cSrcweir sal_Bool bShift = rCode.IsShift(); 572*cdf0e10cSrcweir sal_Bool bCtrl = rCode.IsMod1(); 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir sal_Bool bHandle = sal_False; 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir if( !bCtrl && !bShift && (nCode==KEY_DELETE) ) 577*cdf0e10cSrcweir { 578*cdf0e10cSrcweir Remove(); 579*cdf0e10cSrcweir bHandle = sal_True; 580*cdf0e10cSrcweir } 581*cdf0e10cSrcweir return bHandle; 582*cdf0e10cSrcweir } 583*cdf0e10cSrcweir 584*cdf0e10cSrcweir //------------------------------------------------------------------------------ 585*cdf0e10cSrcweir sal_Bool OTableWindow::ExistsAConn() const 586*cdf0e10cSrcweir { 587*cdf0e10cSrcweir return getTableView()->ExistsAConn(this); 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir //------------------------------------------------------------------------------ 590*cdf0e10cSrcweir void OTableWindow::EnumValidFields(::std::vector< ::rtl::OUString>& arrstrFields) 591*cdf0e10cSrcweir { 592*cdf0e10cSrcweir arrstrFields.clear(); 593*cdf0e10cSrcweir // diese Default-Implementierung zaehlt einfach alles auf, was es in der ListBox gibt ... fuer anderes Verhalten ueberschreiben 594*cdf0e10cSrcweir if ( m_pListBox ) 595*cdf0e10cSrcweir { 596*cdf0e10cSrcweir arrstrFields.reserve(m_pListBox->GetEntryCount()); 597*cdf0e10cSrcweir SvLBoxEntry* pEntryLoop = m_pListBox->First(); 598*cdf0e10cSrcweir while (pEntryLoop) 599*cdf0e10cSrcweir { 600*cdf0e10cSrcweir arrstrFields.push_back(m_pListBox->GetEntryText(pEntryLoop)); 601*cdf0e10cSrcweir pEntryLoop = m_pListBox->Next(pEntryLoop); 602*cdf0e10cSrcweir } 603*cdf0e10cSrcweir } 604*cdf0e10cSrcweir } 605*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 606*cdf0e10cSrcweir void OTableWindow::StateChanged( StateChangedType nType ) 607*cdf0e10cSrcweir { 608*cdf0e10cSrcweir Window::StateChanged( nType ); 609*cdf0e10cSrcweir 610*cdf0e10cSrcweir if ( nType == STATE_CHANGE_ZOOM ) 611*cdf0e10cSrcweir { 612*cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir Font aFont = rStyleSettings.GetGroupFont(); 615*cdf0e10cSrcweir if ( IsControlFont() ) 616*cdf0e10cSrcweir aFont.Merge( GetControlFont() ); 617*cdf0e10cSrcweir SetZoomedPointFont( aFont ); 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir m_aTitle.SetZoom(GetZoom()); 620*cdf0e10cSrcweir m_pListBox->SetZoom(GetZoom()); 621*cdf0e10cSrcweir Resize(); 622*cdf0e10cSrcweir Invalidate(); 623*cdf0e10cSrcweir } 624*cdf0e10cSrcweir } 625*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 626*cdf0e10cSrcweir Reference< XAccessible > OTableWindow::CreateAccessible() 627*cdf0e10cSrcweir { 628*cdf0e10cSrcweir OTableWindowAccess* pAccessible = new OTableWindowAccess(this); 629*cdf0e10cSrcweir m_pAccessible = pAccessible; 630*cdf0e10cSrcweir return pAccessible; 631*cdf0e10cSrcweir } 632*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 633*cdf0e10cSrcweir void OTableWindow::Command(const CommandEvent& rEvt) 634*cdf0e10cSrcweir { 635*cdf0e10cSrcweir switch (rEvt.GetCommand()) 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir case COMMAND_CONTEXTMENU: 638*cdf0e10cSrcweir { 639*cdf0e10cSrcweir OJoinController& rController = getDesignView()->getController(); 640*cdf0e10cSrcweir if(!rController.isReadOnly() && rController.isConnected()) 641*cdf0e10cSrcweir { 642*cdf0e10cSrcweir Point ptWhere; 643*cdf0e10cSrcweir if ( rEvt.IsMouseEvent() ) 644*cdf0e10cSrcweir ptWhere = rEvt.GetMousePosPixel(); 645*cdf0e10cSrcweir else 646*cdf0e10cSrcweir { 647*cdf0e10cSrcweir SvLBoxEntry* pCurrent = m_pListBox->GetCurEntry(); 648*cdf0e10cSrcweir if ( pCurrent ) 649*cdf0e10cSrcweir ptWhere = m_pListBox->GetEntryPosition(pCurrent); 650*cdf0e10cSrcweir else 651*cdf0e10cSrcweir ptWhere = m_aTitle.GetPosPixel(); 652*cdf0e10cSrcweir } 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir PopupMenu aContextMenu(ModuleRes(RID_MENU_JOINVIEW_TABLE)); 655*cdf0e10cSrcweir switch (aContextMenu.Execute(this, ptWhere)) 656*cdf0e10cSrcweir { 657*cdf0e10cSrcweir case SID_DELETE: 658*cdf0e10cSrcweir Remove(); 659*cdf0e10cSrcweir break; 660*cdf0e10cSrcweir } 661*cdf0e10cSrcweir } 662*cdf0e10cSrcweir break; 663*cdf0e10cSrcweir } 664*cdf0e10cSrcweir default: 665*cdf0e10cSrcweir Window::Command(rEvt); 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir } 668*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 669*cdf0e10cSrcweir long OTableWindow::PreNotify(NotifyEvent& rNEvt) 670*cdf0e10cSrcweir { 671*cdf0e10cSrcweir sal_Bool bHandled = sal_False; 672*cdf0e10cSrcweir switch (rNEvt.GetType()) 673*cdf0e10cSrcweir { 674*cdf0e10cSrcweir case EVENT_KEYINPUT: 675*cdf0e10cSrcweir { 676*cdf0e10cSrcweir if ( getDesignView()->getController().isReadOnly() ) 677*cdf0e10cSrcweir break; 678*cdf0e10cSrcweir 679*cdf0e10cSrcweir const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent(); 680*cdf0e10cSrcweir const KeyCode& rCode = pKeyEvent->GetKeyCode(); 681*cdf0e10cSrcweir if ( rCode.IsMod1() ) 682*cdf0e10cSrcweir { 683*cdf0e10cSrcweir Point aStartPoint = GetPosPixel(); 684*cdf0e10cSrcweir if ( rCode.IsShift() ) 685*cdf0e10cSrcweir { 686*cdf0e10cSrcweir aStartPoint.X() = GetSizePixel().Width(); 687*cdf0e10cSrcweir aStartPoint.Y() = GetSizePixel().Height(); 688*cdf0e10cSrcweir } 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir switch( rCode.GetCode() ) 691*cdf0e10cSrcweir { 692*cdf0e10cSrcweir case KEY_DOWN: 693*cdf0e10cSrcweir bHandled = sal_True; 694*cdf0e10cSrcweir aStartPoint.Y() += m_nMoveIncrement; 695*cdf0e10cSrcweir break; 696*cdf0e10cSrcweir case KEY_UP: 697*cdf0e10cSrcweir bHandled = sal_True; 698*cdf0e10cSrcweir aStartPoint.Y() += -m_nMoveIncrement; 699*cdf0e10cSrcweir break; 700*cdf0e10cSrcweir case KEY_LEFT: 701*cdf0e10cSrcweir bHandled = sal_True; 702*cdf0e10cSrcweir aStartPoint.X() += -m_nMoveIncrement; 703*cdf0e10cSrcweir break; 704*cdf0e10cSrcweir case KEY_RIGHT: 705*cdf0e10cSrcweir bHandled = sal_True; 706*cdf0e10cSrcweir aStartPoint.X() += m_nMoveIncrement; 707*cdf0e10cSrcweir break; 708*cdf0e10cSrcweir } 709*cdf0e10cSrcweir if ( bHandled ) 710*cdf0e10cSrcweir { 711*cdf0e10cSrcweir if ( rCode.IsShift() ) 712*cdf0e10cSrcweir { 713*cdf0e10cSrcweir OJoinTableView* pView = getTableView(); 714*cdf0e10cSrcweir Point ptOld = GetPosPixel(); 715*cdf0e10cSrcweir Size aSize = pView->getRealOutputSize(); 716*cdf0e10cSrcweir Size aNewSize(aStartPoint.X(),aStartPoint.Y()); 717*cdf0e10cSrcweir if ( ((ptOld.X() + aNewSize.Width()) <= aSize.Width()) 718*cdf0e10cSrcweir && ((ptOld.Y() + aNewSize.Height()) <= aSize.Height()) ) 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir if ( aNewSize.Width() < TABWIN_WIDTH_MIN ) 721*cdf0e10cSrcweir aNewSize.Width() = TABWIN_WIDTH_MIN; 722*cdf0e10cSrcweir if ( aNewSize.Height() < TABWIN_HEIGHT_MIN ) 723*cdf0e10cSrcweir aNewSize.Height() = TABWIN_HEIGHT_MIN; 724*cdf0e10cSrcweir 725*cdf0e10cSrcweir Size szOld = GetSizePixel(); 726*cdf0e10cSrcweir 727*cdf0e10cSrcweir aNewSize = Size(pView->CalcZoom(aNewSize.Width()),pView->CalcZoom(aNewSize.Height())); 728*cdf0e10cSrcweir SetPosSizePixel( ptOld, aNewSize ); 729*cdf0e10cSrcweir pView->TabWinSized(this, ptOld, szOld); 730*cdf0e10cSrcweir Invalidate( INVALIDATE_NOCHILDREN ); 731*cdf0e10cSrcweir } 732*cdf0e10cSrcweir } 733*cdf0e10cSrcweir else 734*cdf0e10cSrcweir { 735*cdf0e10cSrcweir // remember how often the user moved our window 736*cdf0e10cSrcweir ++m_nMoveCount; 737*cdf0e10cSrcweir if( m_nMoveCount == 5 ) 738*cdf0e10cSrcweir m_nMoveIncrement = 10; 739*cdf0e10cSrcweir else if( m_nMoveCount > 15 ) 740*cdf0e10cSrcweir m_nMoveCount = m_nMoveIncrement = 20; 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir Point aOldDataPoint = GetData()->GetPosition(); 743*cdf0e10cSrcweir Point aNewDataPoint = aStartPoint + getTableView()->GetScrollOffset(); 744*cdf0e10cSrcweir if ( aNewDataPoint.X() > -1 && aNewDataPoint.Y() > -1 ) 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir OJoinTableView* pView = getTableView(); 747*cdf0e10cSrcweir if ( pView->isMovementAllowed(aNewDataPoint, GetData()->GetSize()) ) 748*cdf0e10cSrcweir { 749*cdf0e10cSrcweir SetPosPixel(aStartPoint); 750*cdf0e10cSrcweir 751*cdf0e10cSrcweir // aNewDataPoint can not be used here because SetPosPixel reset it 752*cdf0e10cSrcweir pView->EnsureVisible(GetData()->GetPosition(), GetData()->GetSize()); 753*cdf0e10cSrcweir pView->TabWinMoved(this,aOldDataPoint); 754*cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 755*cdf0e10cSrcweir getDesignView()->getController().setModified( sal_True ); 756*cdf0e10cSrcweir } 757*cdf0e10cSrcweir else 758*cdf0e10cSrcweir { 759*cdf0e10cSrcweir m_nMoveCount = 0; // reset our movement count 760*cdf0e10cSrcweir m_nMoveIncrement = 1; 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir } 763*cdf0e10cSrcweir else 764*cdf0e10cSrcweir { 765*cdf0e10cSrcweir m_nMoveCount = 0; // reset our movement count 766*cdf0e10cSrcweir m_nMoveIncrement = 1; 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir resetSizingFlag(); 770*cdf0e10cSrcweir } 771*cdf0e10cSrcweir else 772*cdf0e10cSrcweir { 773*cdf0e10cSrcweir m_nMoveCount = 0; // reset our movement count 774*cdf0e10cSrcweir m_nMoveIncrement = 1; 775*cdf0e10cSrcweir } 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir else 778*cdf0e10cSrcweir { 779*cdf0e10cSrcweir m_nMoveCount = 0; // reset our movement count 780*cdf0e10cSrcweir m_nMoveIncrement = 1; 781*cdf0e10cSrcweir } 782*cdf0e10cSrcweir } 783*cdf0e10cSrcweir break; 784*cdf0e10cSrcweir case EVENT_KEYUP: 785*cdf0e10cSrcweir { 786*cdf0e10cSrcweir const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent(); 787*cdf0e10cSrcweir const KeyCode& rCode = pKeyEvent->GetKeyCode(); 788*cdf0e10cSrcweir sal_uInt16 nKeyCode = rCode.GetCode(); 789*cdf0e10cSrcweir if ( rCode.IsMod2() && nKeyCode != KEY_UP && nKeyCode != KEY_DOWN && nKeyCode != KEY_LEFT && nKeyCode != KEY_RIGHT ) 790*cdf0e10cSrcweir { 791*cdf0e10cSrcweir m_nMoveCount = 0; // reset our movement count 792*cdf0e10cSrcweir m_nMoveIncrement = 1; 793*cdf0e10cSrcweir } 794*cdf0e10cSrcweir } 795*cdf0e10cSrcweir break; 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir if (!bHandled) 798*cdf0e10cSrcweir return Window::PreNotify(rNEvt); 799*cdf0e10cSrcweir return 1L; 800*cdf0e10cSrcweir } 801*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 802*cdf0e10cSrcweir String OTableWindow::getTitle() const 803*cdf0e10cSrcweir { 804*cdf0e10cSrcweir return m_aTitle.GetText(); 805*cdf0e10cSrcweir } 806*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 807*cdf0e10cSrcweir void OTableWindow::_elementInserted( const container::ContainerEvent& /*_rEvent*/ ) throw(::com::sun::star::uno::RuntimeException) 808*cdf0e10cSrcweir { 809*cdf0e10cSrcweir FillListBox(); 810*cdf0e10cSrcweir } 811*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 812*cdf0e10cSrcweir void OTableWindow::_elementRemoved( const container::ContainerEvent& /*_rEvent*/ ) throw(::com::sun::star::uno::RuntimeException) 813*cdf0e10cSrcweir { 814*cdf0e10cSrcweir FillListBox(); 815*cdf0e10cSrcweir } 816*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 817*cdf0e10cSrcweir void OTableWindow::_elementReplaced( const container::ContainerEvent& /*_rEvent*/ ) throw(::com::sun::star::uno::RuntimeException) 818*cdf0e10cSrcweir { 819*cdf0e10cSrcweir FillListBox(); 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 822*cdf0e10cSrcweir 823