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