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