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