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_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // INCLUDE ------------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <svx/simptabl.hxx> 34*cdf0e10cSrcweir #include <vcl/svapp.hxx> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #ifndef _UNOTOOLS_PROCESSFACTORY_HXX 37*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #include <unotools/intlwrapper.hxx> 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir // SvxSimpTblContainer ------------------------------------------------------ 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir SvxSimpTblContainer::SvxSimpTblContainer( Window* pParent, WinBits nWinStyle): 44*cdf0e10cSrcweir Control(pParent,nWinStyle) 45*cdf0e10cSrcweir { 46*cdf0e10cSrcweir //Do Nothing; 47*cdf0e10cSrcweir } 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir SvxSimpTblContainer::SvxSimpTblContainer( Window* pParent, const ResId& rResId): 50*cdf0e10cSrcweir Control(pParent,rResId) 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir //Do Nothing; 53*cdf0e10cSrcweir } 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir long SvxSimpTblContainer::PreNotify( NotifyEvent& rNEvt ) 56*cdf0e10cSrcweir { 57*cdf0e10cSrcweir long nResult = sal_True; 58*cdf0e10cSrcweir if ( rNEvt.GetType() == EVENT_KEYINPUT ) 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir const KeyCode& aKeyCode = rNEvt.GetKeyEvent()->GetKeyCode(); 61*cdf0e10cSrcweir sal_uInt16 nKey = aKeyCode.GetCode(); 62*cdf0e10cSrcweir if ( nKey == KEY_TAB ) 63*cdf0e10cSrcweir GetParent()->Notify( rNEvt ); 64*cdf0e10cSrcweir else if ( m_pTable->IsFocusOnCellEnabled() && ( nKey == KEY_LEFT || nKey == KEY_RIGHT ) ) 65*cdf0e10cSrcweir return 0; 66*cdf0e10cSrcweir else 67*cdf0e10cSrcweir nResult = Control::PreNotify( rNEvt ); 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir else 70*cdf0e10cSrcweir nResult = Control::PreNotify( rNEvt ); 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir return nResult; 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir // SvxSimpleTable ------------------------------------------------------------ 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir SvxSimpleTable::SvxSimpleTable( Window* pParent,WinBits nBits ): 79*cdf0e10cSrcweir SvHeaderTabListBox(pParent,WB_CLIPCHILDREN | WB_HSCROLL | WB_TABSTOP), 80*cdf0e10cSrcweir aPrivContainer(pParent,nBits|WB_DIALOGCONTROL), 81*cdf0e10cSrcweir aHeaderBar(pParent,WB_BUTTONSTYLE | WB_BORDER | WB_TABSTOP), 82*cdf0e10cSrcweir nHeaderItemId(1), 83*cdf0e10cSrcweir bResizeFlag(sal_False), 84*cdf0e10cSrcweir bPaintFlag(sal_True) 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir bSortDirection=sal_True; 87*cdf0e10cSrcweir nSortCol=0xFFFF; 88*cdf0e10cSrcweir nOldPos=0; 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir SetParent(&aPrivContainer); 91*cdf0e10cSrcweir aHeaderBar.SetParent(&aPrivContainer); 92*cdf0e10cSrcweir aPrivContainer.SetTable( this ); 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir aHeaderBar.SetStartDragHdl(LINK( this, SvxSimpleTable, StartDragHdl)); 95*cdf0e10cSrcweir aHeaderBar.SetDragHdl(LINK( this, SvxSimpleTable, DragHdl)); 96*cdf0e10cSrcweir aHeaderBar.SetEndDragHdl(LINK( this, SvxSimpleTable, EndDragHdl)); 97*cdf0e10cSrcweir aHeaderBar.SetSelectHdl(LINK( this, SvxSimpleTable, HeaderBarClick)); 98*cdf0e10cSrcweir aHeaderBar.SetDoubleClickHdl(LINK( this, SvxSimpleTable, HeaderBarDblClick)); 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir EnableCellFocus(); 101*cdf0e10cSrcweir DisableTransientChildren(); 102*cdf0e10cSrcweir InitHeaderBar( &aHeaderBar ); 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir aHeaderBar.Show(); 105*cdf0e10cSrcweir SvHeaderTabListBox::Show(); 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir SvxSimpleTable::SvxSimpleTable( Window* pParent,const ResId& rResId): 110*cdf0e10cSrcweir SvHeaderTabListBox(pParent,WB_CLIPCHILDREN | WB_HSCROLL | WB_TABSTOP), 111*cdf0e10cSrcweir aPrivContainer(pParent,rResId), 112*cdf0e10cSrcweir aHeaderBar(pParent,WB_BUTTONSTYLE | WB_BORDER | WB_TABSTOP), 113*cdf0e10cSrcweir nHeaderItemId(1), 114*cdf0e10cSrcweir bResizeFlag(sal_True), 115*cdf0e10cSrcweir bPaintFlag(sal_True) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir bSortDirection=sal_True; 119*cdf0e10cSrcweir nOldPos=0; 120*cdf0e10cSrcweir nSortCol=0xFFFF; 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir pMyParentWin=pParent; 123*cdf0e10cSrcweir SetParent(&aPrivContainer); 124*cdf0e10cSrcweir aHeaderBar.SetParent(&aPrivContainer); 125*cdf0e10cSrcweir aPrivContainer.SetTable( this ); 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir WinBits nBits=aPrivContainer.GetStyle()|WB_DIALOGCONTROL; 128*cdf0e10cSrcweir aPrivContainer.SetStyle(nBits); 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir aHeaderBar.SetStartDragHdl(LINK( this, SvxSimpleTable, StartDragHdl)); 131*cdf0e10cSrcweir aHeaderBar.SetDragHdl(LINK( this, SvxSimpleTable, DragHdl)); 132*cdf0e10cSrcweir aHeaderBar.SetEndDragHdl(LINK( this, SvxSimpleTable, EndDragHdl)); 133*cdf0e10cSrcweir aHeaderBar.SetSelectHdl(LINK( this, SvxSimpleTable, HeaderBarClick)); 134*cdf0e10cSrcweir aHeaderBar.SetDoubleClickHdl(LINK( this, SvxSimpleTable, HeaderBarDblClick)); 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir Size theWinSize=aPrivContainer.GetOutputSizePixel(); 137*cdf0e10cSrcweir Size HbSize=aHeaderBar.GetSizePixel(); 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir HbSize.Width()=theWinSize.Width(); 140*cdf0e10cSrcweir theWinSize.Height()-=HbSize.Height(); 141*cdf0e10cSrcweir Point thePos(0,0); 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir aHeaderBar.SetPosPixel(thePos); 144*cdf0e10cSrcweir aHeaderBar.SetSizePixel(HbSize); 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir thePos.Y()+=HbSize.Height(); 147*cdf0e10cSrcweir SvHeaderTabListBox::SetPosPixel(thePos); 148*cdf0e10cSrcweir SvHeaderTabListBox::SetSizePixel(theWinSize); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir EnableCellFocus(); 151*cdf0e10cSrcweir DisableTransientChildren(); 152*cdf0e10cSrcweir InitHeaderBar( &aHeaderBar ); 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir aHeaderBar.Show(); 155*cdf0e10cSrcweir SvHeaderTabListBox::Show(); 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir SvxSimpleTable::~SvxSimpleTable() 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir SetParent(pMyParentWin); 161*cdf0e10cSrcweir aPrivContainer.SetParent(this); 162*cdf0e10cSrcweir aHeaderBar.SetParent(this); 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir void SvxSimpleTable::UpdateViewSize() 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir Size theWinSize=aPrivContainer.GetOutputSizePixel(); 169*cdf0e10cSrcweir Size HbSize=aHeaderBar.GetSizePixel(); 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir HbSize.Width()=theWinSize.Width(); 172*cdf0e10cSrcweir theWinSize.Height()-=HbSize.Height(); 173*cdf0e10cSrcweir Point thePos(0,0); 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir aHeaderBar.SetPosPixel(thePos); 176*cdf0e10cSrcweir aHeaderBar.SetSizePixel(HbSize); 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir thePos.Y()+=HbSize.Height(); 179*cdf0e10cSrcweir SvHeaderTabListBox::SetPosPixel(thePos); 180*cdf0e10cSrcweir SvHeaderTabListBox::SetSizePixel(theWinSize); 181*cdf0e10cSrcweir Invalidate(); 182*cdf0e10cSrcweir } 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir void SvxSimpleTable::NotifyScrolled() 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir long nOffset=-GetXOffset(); 187*cdf0e10cSrcweir if(nOldPos!=nOffset) 188*cdf0e10cSrcweir { 189*cdf0e10cSrcweir aHeaderBar.SetOffset(nOffset); 190*cdf0e10cSrcweir aHeaderBar.Invalidate(); 191*cdf0e10cSrcweir aHeaderBar.Update(); 192*cdf0e10cSrcweir nOldPos=nOffset; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir SvHeaderTabListBox::NotifyScrolled(); 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir void SvxSimpleTable::SetTabs() 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir SvHeaderTabListBox::SetTabs(); 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir sal_uInt16 nPrivTabCount = TabCount(); 202*cdf0e10cSrcweir if ( nPrivTabCount ) 203*cdf0e10cSrcweir { 204*cdf0e10cSrcweir if ( nPrivTabCount > aHeaderBar.GetItemCount() ) 205*cdf0e10cSrcweir nPrivTabCount = aHeaderBar.GetItemCount(); 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir sal_uInt16 i, nNewSize = static_cast< sal_uInt16 >( GetTab(0) ), nPos = 0; 208*cdf0e10cSrcweir for ( i = 1; i < nPrivTabCount; ++i ) 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir nNewSize = static_cast< sal_uInt16 >( GetTab(i) ) - nPos; 211*cdf0e10cSrcweir aHeaderBar.SetItemSize( i, nNewSize ); 212*cdf0e10cSrcweir nPos = (sal_uInt16)GetTab(i); 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir aHeaderBar.SetItemSize( i, HEADERBAR_FULLSIZE ); // because no tab for last entry 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir } 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir void SvxSimpleTable::SetTabs( long* pTabs, MapUnit eMapUnit) 220*cdf0e10cSrcweir { 221*cdf0e10cSrcweir SvHeaderTabListBox::SetTabs(pTabs,eMapUnit); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir void SvxSimpleTable::Paint( const Rectangle& rRect ) 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir SvHeaderTabListBox::Paint(rRect ); 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir sal_uInt16 nPrivTabCount = TabCount(); 229*cdf0e10cSrcweir sal_uInt16 nPos = 0; 230*cdf0e10cSrcweir sal_uInt16 nNewSize = ( nPrivTabCount > 0 ) ? (sal_uInt16)GetTab(0) : 0; 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir long nOffset=-GetXOffset(); 233*cdf0e10cSrcweir nOldPos=nOffset; 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir aHeaderBar.SetOffset(nOffset); 236*cdf0e10cSrcweir aHeaderBar.Invalidate(); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir if(nPrivTabCount && bPaintFlag) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir if(nPrivTabCount>aHeaderBar.GetItemCount()) 241*cdf0e10cSrcweir nPrivTabCount=aHeaderBar.GetItemCount(); 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir for(sal_uInt16 i=1;i<nPrivTabCount;i++) 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir nNewSize = static_cast< sal_uInt16 >( GetTab(i) ) - nPos; 246*cdf0e10cSrcweir aHeaderBar.SetItemSize( i, nNewSize ); 247*cdf0e10cSrcweir nPos= static_cast< sal_uInt16 >( GetTab(i) ); 248*cdf0e10cSrcweir } 249*cdf0e10cSrcweir } 250*cdf0e10cSrcweir bPaintFlag=sal_True; 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir void SvxSimpleTable::InsertHeaderEntry(const XubString& rText,sal_uInt16 nCol, 253*cdf0e10cSrcweir HeaderBarItemBits nBits) 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir xub_StrLen nEnd = rText.Search( sal_Unicode( '\t' ) ); 256*cdf0e10cSrcweir if( nEnd == STRING_NOTFOUND ) 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir aHeaderBar.InsertItem(nHeaderItemId++, rText, 0, nBits, nCol); 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir else 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir xub_StrLen nCount = rText.GetTokenCount( sal_Unicode( '\t' ) ); 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir for( xub_StrLen i=0; i<nCount; i++ ) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir String aString=rText.GetToken(i, sal_Unicode( '\t' ) ); 267*cdf0e10cSrcweir aHeaderBar.InsertItem(nHeaderItemId++, aString, 0, nBits, nCol); 268*cdf0e10cSrcweir } 269*cdf0e10cSrcweir } 270*cdf0e10cSrcweir SetTabs(); 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir void SvxSimpleTable::ClearAll() 274*cdf0e10cSrcweir { 275*cdf0e10cSrcweir aHeaderBar.Clear(); 276*cdf0e10cSrcweir Clear(); 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir void SvxSimpleTable::ClearHeader() 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir aHeaderBar.Clear(); 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir void SvxSimpleTable::ShowTable() 284*cdf0e10cSrcweir { 285*cdf0e10cSrcweir aPrivContainer.Show(); 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir void SvxSimpleTable::HideTable() 289*cdf0e10cSrcweir { 290*cdf0e10cSrcweir aPrivContainer.Hide(); 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir sal_Bool SvxSimpleTable::IsVisible() const 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir return aPrivContainer.IsVisible(); 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir void SvxSimpleTable::EnableTable() 299*cdf0e10cSrcweir { 300*cdf0e10cSrcweir aPrivContainer.Enable(); 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir void SvxSimpleTable::DisableTable() 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir aPrivContainer.Disable(); 306*cdf0e10cSrcweir } 307*cdf0e10cSrcweir 308*cdf0e10cSrcweir sal_Bool SvxSimpleTable::IsEnabled() const 309*cdf0e10cSrcweir { 310*cdf0e10cSrcweir return aPrivContainer.IsEnabled(); 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir void SvxSimpleTable::TableToTop() 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir aPrivContainer.ToTop(); 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir void SvxSimpleTable::SetPosPixel( const Point& rNewPos ) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir aPrivContainer.SetPosPixel(rNewPos); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir Point SvxSimpleTable::GetPosPixel() const 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir return aPrivContainer.GetPosPixel(); 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir void SvxSimpleTable::SetPosSizePixel( const Point& rNewPos, Size& rNewSize ) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir aPrivContainer.SetPosPixel(rNewPos); 331*cdf0e10cSrcweir aPrivContainer.SetSizePixel(rNewSize); 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir void SvxSimpleTable::SetPosSize( const Point& rNewPos, const Size& rNewSize ) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir aPrivContainer.SetPosPixel(rNewPos); 337*cdf0e10cSrcweir SvHeaderTabListBox::SetPosSizePixel(rNewPos,rNewSize); 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir Size SvxSimpleTable::GetSizePixel() const 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir return aPrivContainer.GetSizePixel(); 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir Size SvxSimpleTable::GetOutputSizePixel() const 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir return aPrivContainer.GetOutputSizePixel(); 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir void SvxSimpleTable::SetSizePixel(const Size& rNewSize ) 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir aPrivContainer.SetSizePixel(rNewSize); 353*cdf0e10cSrcweir UpdateViewSize(); 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir void SvxSimpleTable::SetOutputSizePixel(const Size& rNewSize ) 357*cdf0e10cSrcweir { 358*cdf0e10cSrcweir aPrivContainer.SetOutputSizePixel(rNewSize); 359*cdf0e10cSrcweir UpdateViewSize(); 360*cdf0e10cSrcweir } 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir sal_uInt16 SvxSimpleTable::GetSelectedCol() 363*cdf0e10cSrcweir { 364*cdf0e10cSrcweir return (aHeaderBar.GetCurItemId()-1); 365*cdf0e10cSrcweir } 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir void SvxSimpleTable::SortByCol(sal_uInt16 nCol,sal_Bool bDir) 368*cdf0e10cSrcweir { 369*cdf0e10cSrcweir bSortDirection=bDir; 370*cdf0e10cSrcweir if(nSortCol!=0xFFFF) 371*cdf0e10cSrcweir aHeaderBar.SetItemBits(nSortCol+1,HIB_STDSTYLE); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir if (nCol != 0xFFFF) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir if(bDir) 376*cdf0e10cSrcweir { 377*cdf0e10cSrcweir aHeaderBar.SetItemBits( nCol+1, HIB_STDSTYLE | HIB_DOWNARROW); 378*cdf0e10cSrcweir GetModel()->SetSortMode(SortAscending); 379*cdf0e10cSrcweir } 380*cdf0e10cSrcweir else 381*cdf0e10cSrcweir { 382*cdf0e10cSrcweir aHeaderBar.SetItemBits( nCol+1, HIB_STDSTYLE | HIB_UPARROW); 383*cdf0e10cSrcweir GetModel()->SetSortMode(SortDescending); 384*cdf0e10cSrcweir } 385*cdf0e10cSrcweir nSortCol=nCol; 386*cdf0e10cSrcweir GetModel()->SetCompareHdl( LINK( this, SvxSimpleTable, CompareHdl)); 387*cdf0e10cSrcweir GetModel()->Resort(); 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir else 390*cdf0e10cSrcweir GetModel()->SetSortMode(SortNone); 391*cdf0e10cSrcweir nSortCol=nCol; 392*cdf0e10cSrcweir } 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir void SvxSimpleTable::HBarClick() 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir sal_uInt16 nId=aHeaderBar.GetCurItemId(); 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir if (aHeaderBar.GetItemBits(nId) & HIB_CLICKABLE) 399*cdf0e10cSrcweir { 400*cdf0e10cSrcweir if(nId==nSortCol+1) 401*cdf0e10cSrcweir { 402*cdf0e10cSrcweir SortByCol(nId-1,!bSortDirection); 403*cdf0e10cSrcweir } 404*cdf0e10cSrcweir else 405*cdf0e10cSrcweir { 406*cdf0e10cSrcweir SortByCol(nId-1,bSortDirection); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir aHeaderBarClickLink.Call(this); 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir void SvxSimpleTable::HBarDblClick() 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir aHeaderBarDblClickLink.Call(this); 416*cdf0e10cSrcweir } 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir void SvxSimpleTable::HBarStartDrag() 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir if(!aHeaderBar.IsItemMode()) 421*cdf0e10cSrcweir { 422*cdf0e10cSrcweir Rectangle aSizeRect(Point(0,0), 423*cdf0e10cSrcweir SvHeaderTabListBox::GetOutputSizePixel()); 424*cdf0e10cSrcweir aSizeRect.Left()=-GetXOffset()+aHeaderBar.GetDragPos(); 425*cdf0e10cSrcweir aSizeRect.Right()=-GetXOffset()+aHeaderBar.GetDragPos(); 426*cdf0e10cSrcweir ShowTracking( aSizeRect, SHOWTRACK_SPLIT ); 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir void SvxSimpleTable::HBarDrag() 430*cdf0e10cSrcweir { 431*cdf0e10cSrcweir HideTracking(); 432*cdf0e10cSrcweir if(!aHeaderBar.IsItemMode()) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir Rectangle aSizeRect(Point(0,0), 435*cdf0e10cSrcweir SvHeaderTabListBox::GetOutputSizePixel()); 436*cdf0e10cSrcweir aSizeRect.Left()=-GetXOffset()+aHeaderBar.GetDragPos(); 437*cdf0e10cSrcweir aSizeRect.Right()=-GetXOffset()+aHeaderBar.GetDragPos(); 438*cdf0e10cSrcweir ShowTracking( aSizeRect, SHOWTRACK_SPLIT ); 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir void SvxSimpleTable::HBarEndDrag() 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir HideTracking(); 444*cdf0e10cSrcweir sal_uInt16 nPrivTabCount=TabCount(); 445*cdf0e10cSrcweir sal_uInt16 nPos=0; 446*cdf0e10cSrcweir sal_uInt16 nNewSize=0; 447*cdf0e10cSrcweir 448*cdf0e10cSrcweir if(nPrivTabCount) 449*cdf0e10cSrcweir { 450*cdf0e10cSrcweir if(nPrivTabCount>aHeaderBar.GetItemCount()) 451*cdf0e10cSrcweir nPrivTabCount=aHeaderBar.GetItemCount(); 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir //for(sal_uInt16 i=1;i<=nPrivTabCount;i++) 454*cdf0e10cSrcweir for(sal_uInt16 i=1;i<nPrivTabCount;i++) 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir nNewSize = static_cast< sal_uInt16 >( aHeaderBar.GetItemSize(i) ) + nPos; 457*cdf0e10cSrcweir SetTab( i, nNewSize, MAP_PIXEL ); 458*cdf0e10cSrcweir nPos = nNewSize; 459*cdf0e10cSrcweir } 460*cdf0e10cSrcweir } 461*cdf0e10cSrcweir bPaintFlag=sal_False; 462*cdf0e10cSrcweir Invalidate(); 463*cdf0e10cSrcweir Update(); 464*cdf0e10cSrcweir } 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir CommandEvent SvxSimpleTable::GetCommandEvent() const 467*cdf0e10cSrcweir { 468*cdf0e10cSrcweir return aCEvt; 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir void SvxSimpleTable::Command( const CommandEvent& rCEvt ) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir aCEvt=rCEvt; 474*cdf0e10cSrcweir aCommandLink.Call(this); 475*cdf0e10cSrcweir SvHeaderTabListBox::Command(rCEvt); 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, StartDragHdl, HeaderBar*, pCtr) 479*cdf0e10cSrcweir { 480*cdf0e10cSrcweir if(pCtr==&aHeaderBar) 481*cdf0e10cSrcweir { 482*cdf0e10cSrcweir HBarStartDrag(); 483*cdf0e10cSrcweir } 484*cdf0e10cSrcweir return 0; 485*cdf0e10cSrcweir } 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, DragHdl, HeaderBar*, pCtr) 488*cdf0e10cSrcweir { 489*cdf0e10cSrcweir if(pCtr==&aHeaderBar) 490*cdf0e10cSrcweir { 491*cdf0e10cSrcweir HBarDrag(); 492*cdf0e10cSrcweir } 493*cdf0e10cSrcweir return 0; 494*cdf0e10cSrcweir } 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, EndDragHdl, HeaderBar*, pCtr) 497*cdf0e10cSrcweir { 498*cdf0e10cSrcweir if(pCtr==&aHeaderBar) 499*cdf0e10cSrcweir { 500*cdf0e10cSrcweir HBarEndDrag(); 501*cdf0e10cSrcweir } 502*cdf0e10cSrcweir return 0; 503*cdf0e10cSrcweir } 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, HeaderBarClick, HeaderBar*, pCtr) 506*cdf0e10cSrcweir { 507*cdf0e10cSrcweir if(pCtr==&aHeaderBar) 508*cdf0e10cSrcweir { 509*cdf0e10cSrcweir HBarClick(); 510*cdf0e10cSrcweir } 511*cdf0e10cSrcweir return 0; 512*cdf0e10cSrcweir } 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, HeaderBarDblClick, HeaderBar*, pCtr) 515*cdf0e10cSrcweir { 516*cdf0e10cSrcweir if(pCtr==&aHeaderBar) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir HBarDblClick(); 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir return 0; 521*cdf0e10cSrcweir } 522*cdf0e10cSrcweir 523*cdf0e10cSrcweir SvLBoxItem* SvxSimpleTable::GetEntryAtPos( SvLBoxEntry* pEntry, sal_uInt16 nPos ) const 524*cdf0e10cSrcweir { 525*cdf0e10cSrcweir DBG_ASSERT(pEntry,"GetEntryText:Invalid Entry"); 526*cdf0e10cSrcweir SvLBoxItem* pItem = NULL; 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir if( pEntry ) 529*cdf0e10cSrcweir { 530*cdf0e10cSrcweir sal_uInt16 nCount = pEntry->ItemCount(); 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir nPos++; 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir if( nTreeFlags & TREEFLAG_CHKBTN ) nPos++; 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir if( nPos < nCount ) 537*cdf0e10cSrcweir { 538*cdf0e10cSrcweir pItem = pEntry->GetItem( nPos); 539*cdf0e10cSrcweir } 540*cdf0e10cSrcweir } 541*cdf0e10cSrcweir return pItem; 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir StringCompare SvxSimpleTable::ColCompare(SvLBoxEntry* pLeft,SvLBoxEntry* pRight) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir StringCompare eCompare=COMPARE_EQUAL; 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir SvLBoxItem* pLeftItem = GetEntryAtPos( pLeft, nSortCol); 549*cdf0e10cSrcweir SvLBoxItem* pRightItem = GetEntryAtPos( pRight, nSortCol); 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir 552*cdf0e10cSrcweir if(pLeftItem != NULL && pRightItem != NULL) 553*cdf0e10cSrcweir { 554*cdf0e10cSrcweir sal_uInt16 nLeftKind=pLeftItem->IsA(); 555*cdf0e10cSrcweir sal_uInt16 nRightKind=pRightItem->IsA(); 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir if(nRightKind == SV_ITEM_ID_LBOXSTRING && 558*cdf0e10cSrcweir nLeftKind == SV_ITEM_ID_LBOXSTRING ) 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 561*cdf0e10cSrcweir const CollatorWrapper* pCollator = aIntlWrapper.getCaseCollator(); 562*cdf0e10cSrcweir 563*cdf0e10cSrcweir eCompare=(StringCompare)pCollator->compareString( ((SvLBoxString*)pLeftItem)->GetText(), 564*cdf0e10cSrcweir ((SvLBoxString*)pRightItem)->GetText()); 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir if(eCompare==COMPARE_EQUAL) eCompare=COMPARE_LESS; 567*cdf0e10cSrcweir } 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir return eCompare; 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir IMPL_LINK( SvxSimpleTable, CompareHdl, SvSortData*, pData) 573*cdf0e10cSrcweir { 574*cdf0e10cSrcweir SvLBoxEntry* pLeft = (SvLBoxEntry*)(pData->pLeft ); 575*cdf0e10cSrcweir SvLBoxEntry* pRight = (SvLBoxEntry*)(pData->pRight ); 576*cdf0e10cSrcweir return (long) ColCompare(pLeft,pRight); 577*cdf0e10cSrcweir } 578*cdf0e10cSrcweir 579*cdf0e10cSrcweir 580