xref: /trunk/main/svx/source/dialog/simptabl.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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