xref: /aoo41x/main/sw/source/ui/misc/srtdlg.cxx (revision 8ef2f12b)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10efeef26fSAndrew Rist  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19efeef26fSAndrew Rist  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION
27cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
28cdf0e10cSrcweir #endif
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include "srtdlg.hxx"
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #ifndef _MSGBOX_HXX //autogen
33cdf0e10cSrcweir #include <vcl/msgbox.hxx>
34cdf0e10cSrcweir #endif
35cdf0e10cSrcweir #include <svl/intitem.hxx>
36cdf0e10cSrcweir #include <svl/eitem.hxx>
37cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
38cdf0e10cSrcweir #include <svx/svxids.hrc>
39cdf0e10cSrcweir #include <editeng/unolingu.hxx>
40cdf0e10cSrcweir #include <svx/svxdlg.hxx>
41cdf0e10cSrcweir #include <svx/dialogs.hrc>
42cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
43cdf0e10cSrcweir #include <svtools/collatorres.hxx>
44cdf0e10cSrcweir #include <swwait.hxx>
45cdf0e10cSrcweir #include <view.hxx>
46cdf0e10cSrcweir #include <cmdid.h>
47cdf0e10cSrcweir #include <wrtsh.hxx>
48cdf0e10cSrcweir #include <misc.hrc>
49cdf0e10cSrcweir #include <srtdlg.hrc>
50cdf0e10cSrcweir #include <swtable.hxx>
51cdf0e10cSrcweir #include <node.hxx>
52cdf0e10cSrcweir #include <tblsel.hxx>
53cdf0e10cSrcweir #include <sfx2/request.hxx>
54cdf0e10cSrcweir 
55cdf0e10cSrcweir // sw/inc/tblsel.hxx
56cdf0e10cSrcweir SV_IMPL_PTRARR( _FndBoxes, _FndBox* )
57cdf0e10cSrcweir SV_IMPL_PTRARR( _FndLines, _FndLine* )
58cdf0e10cSrcweir 
59cdf0e10cSrcweir static sal_Bool bCheck1 = sal_True;
60cdf0e10cSrcweir static sal_Bool bCheck2 = sal_False;
61cdf0e10cSrcweir static sal_Bool bCheck3 = sal_False;
62cdf0e10cSrcweir 
63cdf0e10cSrcweir static sal_uInt16 nCol1 = 1;
64cdf0e10cSrcweir static sal_uInt16 nCol2 = 1;
65cdf0e10cSrcweir static sal_uInt16 nCol3 = 1;
66cdf0e10cSrcweir 
67cdf0e10cSrcweir static sal_uInt16 nType1 = 0;
68cdf0e10cSrcweir static sal_uInt16 nType2 = 0;
69cdf0e10cSrcweir static sal_uInt16 nType3 = 0;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir static sal_uInt16 nLang = LANGUAGE_NONE;
72cdf0e10cSrcweir 
73cdf0e10cSrcweir static sal_Bool	  bAsc1	 = sal_True;
74cdf0e10cSrcweir static sal_Bool	  bAsc2	 = sal_True;
75cdf0e10cSrcweir static sal_Bool	  bAsc3	 = sal_True;
76cdf0e10cSrcweir static sal_Bool	  bCol	 = sal_False;
77cdf0e10cSrcweir static sal_Bool	  bCsSens= sal_False;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir static sal_Unicode	  cDeli	 = '\t';
80cdf0e10cSrcweir 
81cdf0e10cSrcweir using namespace ::com::sun::star::lang;
82cdf0e10cSrcweir using namespace ::com::sun::star::uno;
83cdf0e10cSrcweir using ::rtl::OUString;
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 
lcl_ClearLstBoxAndDelUserData(ListBox & rLstBox)86cdf0e10cSrcweir void lcl_ClearLstBoxAndDelUserData( ListBox& rLstBox )
87cdf0e10cSrcweir {
88cdf0e10cSrcweir 	void* pDel;
89cdf0e10cSrcweir 	for( sal_uInt16 n = 0, nEnd = rLstBox.GetEntryCount(); n < nEnd; ++n )
90cdf0e10cSrcweir 		if( 0 != ( pDel = rLstBox.GetEntryData( n )) )
91cdf0e10cSrcweir 			delete (String*)pDel;
92cdf0e10cSrcweir 	rLstBox.Clear();
93cdf0e10cSrcweir }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir /*--------------------------------------------------------------------
96cdf0e10cSrcweir 	 Beschreibung: 	Fuer Tabellenselektion sel. Zeilen und Spalten
97cdf0e10cSrcweir 					feststellen
98cdf0e10cSrcweir  --------------------------------------------------------------------*/
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 
lcl_GetSelTbl(SwWrtShell & rSh,sal_uInt16 & rX,sal_uInt16 & rY)101cdf0e10cSrcweir sal_Bool lcl_GetSelTbl( SwWrtShell &rSh, sal_uInt16& rX, sal_uInt16& rY )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 	const SwTableNode* pTblNd = rSh.IsCrsrInTbl();
104cdf0e10cSrcweir 	if( !pTblNd )
105cdf0e10cSrcweir 		return sal_False;
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	_FndBox aFndBox( 0, 0 );
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 	// suche alle Boxen / Lines
110cdf0e10cSrcweir 	{
111cdf0e10cSrcweir 		SwSelBoxes aSelBoxes;
112cdf0e10cSrcweir 		::GetTblSel( rSh, aSelBoxes );
113cdf0e10cSrcweir 		_FndPara aPara( aSelBoxes, &aFndBox );
114cdf0e10cSrcweir 		const SwTable& rTbl = pTblNd->GetTable();
115cdf0e10cSrcweir 		((SwTableLines&)rTbl.GetTabLines()).ForEach( &_FndLineCopyCol, &aPara );
116cdf0e10cSrcweir 	}
117cdf0e10cSrcweir 	rX = aFndBox.GetLines().Count();
118cdf0e10cSrcweir 	if( !rX )
119cdf0e10cSrcweir 		return sal_False;
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	rY = aFndBox.GetLines()[0]->GetBoxes().Count();
122cdf0e10cSrcweir 	return sal_True;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir 
125cdf0e10cSrcweir /*--------------------------------------------------------------------
126cdf0e10cSrcweir 	 Beschreibung: Init-Liste
127cdf0e10cSrcweir  --------------------------------------------------------------------*/
128cdf0e10cSrcweir 
SwSortDlg(Window * pParent,SwWrtShell & rShell)129cdf0e10cSrcweir SwSortDlg::SwSortDlg(Window* pParent, SwWrtShell &rShell) :
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	SvxStandardDialog(pParent, SW_RES(DLG_SORTING)),
132cdf0e10cSrcweir 
133cdf0e10cSrcweir     aColLbl(this, 		SW_RES(FT_COL   )),
134cdf0e10cSrcweir 	aTypLbl(this, 		SW_RES(FT_KEYTYP)),
135cdf0e10cSrcweir 	aDirLbl(this, 		SW_RES(FT_DIR	)),
136cdf0e10cSrcweir     aSortFL(this,      SW_RES(FL_SORT_2  )),
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 
139cdf0e10cSrcweir     aKeyCB1(this,       SW_RES(CB_KEY1  )),
140cdf0e10cSrcweir 	aColEdt1(this, 		SW_RES(ED_KEY1  )),
141cdf0e10cSrcweir 	aTypDLB1(this, 		SW_RES(DLB_KEY1 )),
142cdf0e10cSrcweir 	aSortUpRB(this, 	SW_RES(RB_UP    )),
143cdf0e10cSrcweir 	aSortDnRB(this, 	SW_RES(RB_DN    )),
144cdf0e10cSrcweir 
145cdf0e10cSrcweir     aKeyCB2(this,       SW_RES(CB_KEY2  )),
146cdf0e10cSrcweir 	aColEdt2(this, 		SW_RES(ED_KEY2  )),
147cdf0e10cSrcweir 	aTypDLB2(this, 		SW_RES(DLB_KEY2 )),
148cdf0e10cSrcweir 	aSortUp2RB(this, 	SW_RES(RB_UP2    )),
149cdf0e10cSrcweir 	aSortDn2RB(this, 	SW_RES(RB_DN2    )),
150cdf0e10cSrcweir 
151cdf0e10cSrcweir     aKeyCB3(this,       SW_RES(CB_KEY3  )),
152cdf0e10cSrcweir 	aColEdt3(this, 		SW_RES(ED_KEY3  )),
153cdf0e10cSrcweir 	aTypDLB3(this, 		SW_RES(DLB_KEY3 )),
154cdf0e10cSrcweir 	aSortUp3RB(this, 	SW_RES(RB_UP3    )),
155cdf0e10cSrcweir 	aSortDn3RB(this, 	SW_RES(RB_DN3    )),
156cdf0e10cSrcweir 	aDirFL(this,       SW_RES(FL_DIR   )),
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	aColumnRB(this, 	SW_RES(RB_COL   )),
159cdf0e10cSrcweir 	aRowRB(this, 		SW_RES(RB_ROW   )),
160cdf0e10cSrcweir 
161cdf0e10cSrcweir     aDelimFL(this,     SW_RES(FL_DELIM )),
162cdf0e10cSrcweir     aDelimTabRB(this,   SW_RES(RB_TAB   )),
163cdf0e10cSrcweir 	aDelimFreeRB(this, 	SW_RES(RB_TABCH )),
164cdf0e10cSrcweir 	aDelimEdt(this, 	SW_RES(ED_TABCH )),
165cdf0e10cSrcweir     aDelimPB(this,    	SW_RES( PB_DELIM)),
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     aLangFL(this,       SW_RES( FL_LANG )),
168cdf0e10cSrcweir     aLangLB(this,     	SW_RES( LB_LANG )),
169cdf0e10cSrcweir 
170cdf0e10cSrcweir     aSortOptFL(this,    SW_RES( FL_SORT )),
171cdf0e10cSrcweir     aCaseCB(this,     	SW_RES( CB_CASE )),
172cdf0e10cSrcweir 
173cdf0e10cSrcweir     aOkBtn(this,        SW_RES(BT_OK    )),
174cdf0e10cSrcweir     aCancelBtn(this,    SW_RES(BT_CANCEL)),
175cdf0e10cSrcweir     aHelpBtn(this,      SW_RES(BT_HELP  )),
176cdf0e10cSrcweir 
177cdf0e10cSrcweir     aColTxt(            SW_RES(STR_COL)),
178cdf0e10cSrcweir     aRowTxt(            SW_RES(STR_ROW)),
179cdf0e10cSrcweir 	aNumericTxt(		SW_RES(STR_NUMERIC)),
180cdf0e10cSrcweir     rSh(rShell),
181cdf0e10cSrcweir     pColRes( 0 ),
182cdf0e10cSrcweir 	nX( 99 ),
183cdf0e10cSrcweir     nY( 99 )
184cdf0e10cSrcweir {
185cdf0e10cSrcweir 	aColEdt1.SetAccessibleName(aColLbl.GetText());
186cdf0e10cSrcweir 	aColEdt2.SetAccessibleName(aColLbl.GetText());
187cdf0e10cSrcweir 	aColEdt3.SetAccessibleName(aColLbl.GetText());
188cdf0e10cSrcweir 	aTypDLB1.SetAccessibleName(aTypLbl.GetText());
189cdf0e10cSrcweir 	aTypDLB2.SetAccessibleName(aTypLbl.GetText());
190cdf0e10cSrcweir 	aTypDLB3.SetAccessibleName(aTypLbl.GetText());
191cdf0e10cSrcweir 	aSortUpRB.SetAccessibleRelationMemberOf( &aKeyCB1 );
192cdf0e10cSrcweir 	aSortDnRB.SetAccessibleRelationMemberOf( &aKeyCB1 );
193cdf0e10cSrcweir 	aSortUp2RB.SetAccessibleRelationMemberOf( &aKeyCB2 );
194cdf0e10cSrcweir 	aSortDn2RB.SetAccessibleRelationMemberOf( &aKeyCB2 );
195cdf0e10cSrcweir 	aSortUp3RB.SetAccessibleRelationMemberOf( &aKeyCB3 );
196cdf0e10cSrcweir 	aSortDn3RB.SetAccessibleRelationMemberOf( &aKeyCB3 );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	aDelimEdt.SetMaxTextLen( 1 );
199cdf0e10cSrcweir 	if(rSh.GetSelectionType() &
200cdf0e10cSrcweir 			(nsSelectionType::SEL_TBL|nsSelectionType::SEL_TBL_CELLS) )
201cdf0e10cSrcweir 	{
202cdf0e10cSrcweir 		aColumnRB.Check(bCol);
203cdf0e10cSrcweir 		aColLbl.SetText(bCol ? aRowTxt : aColTxt);
204cdf0e10cSrcweir 		aRowRB.Check(!bCol);
205cdf0e10cSrcweir 		aDelimTabRB.Enable(sal_False);
206cdf0e10cSrcweir 		aDelimFreeRB.Enable(sal_False);
207cdf0e10cSrcweir 		aDelimEdt.Enable(sal_False);
208cdf0e10cSrcweir 	}
209cdf0e10cSrcweir 	else
210cdf0e10cSrcweir 	{
211cdf0e10cSrcweir 		aColumnRB.Enable(sal_False);
212cdf0e10cSrcweir 		aRowRB.Check(sal_True);
213cdf0e10cSrcweir 		aColLbl.SetText(aColTxt);
214cdf0e10cSrcweir 	}
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	// Initialisieren
217cdf0e10cSrcweir 	Link aLk = LINK(this,SwSortDlg, CheckHdl);
218cdf0e10cSrcweir 	aKeyCB1.SetClickHdl( aLk );
219cdf0e10cSrcweir 	aKeyCB2.SetClickHdl( aLk );
220cdf0e10cSrcweir 	aKeyCB3.SetClickHdl( aLk );
221cdf0e10cSrcweir 	aColumnRB.SetClickHdl( aLk );
222cdf0e10cSrcweir 	aRowRB.SetClickHdl( aLk );
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	aLk = LINK(this,SwSortDlg, DelimHdl);
225cdf0e10cSrcweir 	aDelimFreeRB.SetClickHdl(aLk);
226cdf0e10cSrcweir 	aDelimTabRB.SetClickHdl(aLk);
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 	aDelimPB.SetClickHdl( LINK( this, SwSortDlg, DelimCharHdl ));
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 	aKeyCB1.Check(bCheck1);
231cdf0e10cSrcweir 	aKeyCB2.Check(bCheck2);
232cdf0e10cSrcweir 	aKeyCB3.Check(bCheck3);
233cdf0e10cSrcweir 
234cdf0e10cSrcweir 	aColEdt1.SetValue(nCol1);
235cdf0e10cSrcweir 	aColEdt2.SetValue(nCol2);
236cdf0e10cSrcweir 	aColEdt3.SetValue(nCol3);
237cdf0e10cSrcweir 
238cdf0e10cSrcweir 	// first initialise the language, then select the
239cdf0e10cSrcweir 	if( LANGUAGE_NONE == nLang || LANGUAGE_DONTKNOW == nLang )
240cdf0e10cSrcweir 		nLang = (sal_uInt16)GetAppLanguage();
241cdf0e10cSrcweir 
242cdf0e10cSrcweir     aLangLB.SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, sal_True, sal_False);
243cdf0e10cSrcweir 	aLangLB.SelectLanguage( nLang );
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 	LanguageHdl( 0 );
246cdf0e10cSrcweir 	aLangLB.SetSelectHdl( LINK( this, SwSortDlg, LanguageHdl ));
247cdf0e10cSrcweir 
248cdf0e10cSrcweir 	aSortUpRB.Check(bAsc1);
249cdf0e10cSrcweir 	aSortDnRB.Check(!bAsc1);
250cdf0e10cSrcweir 	aSortUp2RB.Check(bAsc2);
251cdf0e10cSrcweir 	aSortDn2RB.Check(!bAsc2);
252cdf0e10cSrcweir 	aSortUp3RB.Check(bAsc3);
253cdf0e10cSrcweir 	aSortDn3RB.Check(!bAsc3);
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	aCaseCB.Check( bCsSens );
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 	aDelimTabRB.Check(cDeli == '\t');
258cdf0e10cSrcweir 	if(!aDelimTabRB.IsChecked())
259cdf0e10cSrcweir 	{
260cdf0e10cSrcweir 		aDelimEdt.SetText(cDeli);
261cdf0e10cSrcweir 		aDelimFreeRB.Check(sal_True);
262cdf0e10cSrcweir 		DelimHdl(&aDelimFreeRB);
263cdf0e10cSrcweir 	}
264cdf0e10cSrcweir 	else
265cdf0e10cSrcweir 		DelimHdl(&aDelimTabRB);
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	FreeResource();
268cdf0e10cSrcweir 	if( ::lcl_GetSelTbl( rSh, nX, nY) )
269cdf0e10cSrcweir 	{
270cdf0e10cSrcweir 		sal_uInt16 nMax = aRowRB.IsChecked()? nY : nX;
271cdf0e10cSrcweir 		aColEdt1.SetMax(nMax);
272cdf0e10cSrcweir 		aColEdt2.SetMax(nMax);
273cdf0e10cSrcweir 		aColEdt3.SetMax(nMax);
274cdf0e10cSrcweir 	}
275cdf0e10cSrcweir 
276cdf0e10cSrcweir 	aDelimEdt.SetAccessibleRelationLabeledBy(&aDelimFreeRB);
277cdf0e10cSrcweir 	aDelimPB.SetAccessibleRelationLabeledBy(&aDelimFreeRB);
278cdf0e10cSrcweir 	aDelimPB.SetAccessibleRelationMemberOf(&aDelimFL);
279cdf0e10cSrcweir 
280cdf0e10cSrcweir 	aColEdt1.SetAccessibleRelationMemberOf(&aKeyCB1);
281cdf0e10cSrcweir 	aColEdt1.SetAccessibleRelationLabeledBy(&aColLbl);
282cdf0e10cSrcweir 	aTypDLB1.SetAccessibleRelationMemberOf(&aKeyCB1);
283cdf0e10cSrcweir 	aTypDLB1.SetAccessibleRelationLabeledBy(&aTypLbl);
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 	aColEdt2.SetAccessibleRelationMemberOf(&aKeyCB2);
286cdf0e10cSrcweir 	aColEdt2.SetAccessibleRelationLabeledBy(&aColLbl);
287cdf0e10cSrcweir 	aTypDLB2.SetAccessibleRelationMemberOf(&aKeyCB2);
288cdf0e10cSrcweir 	aTypDLB2.SetAccessibleRelationLabeledBy(&aTypLbl);
289cdf0e10cSrcweir 
290cdf0e10cSrcweir 	aColEdt3.SetAccessibleRelationMemberOf(&aKeyCB3);
291cdf0e10cSrcweir 	aColEdt3.SetAccessibleRelationLabeledBy(&aColLbl);
292cdf0e10cSrcweir 	aTypDLB3.SetAccessibleRelationMemberOf(&aKeyCB3);
293cdf0e10cSrcweir 	aTypDLB3.SetAccessibleRelationLabeledBy(&aTypLbl);
294cdf0e10cSrcweir }
295cdf0e10cSrcweir 
~SwSortDlg()296cdf0e10cSrcweir SwSortDlg::~SwSortDlg()
297cdf0e10cSrcweir {
298cdf0e10cSrcweir 	::lcl_ClearLstBoxAndDelUserData( aTypDLB1 );
299cdf0e10cSrcweir 	::lcl_ClearLstBoxAndDelUserData( aTypDLB2 );
300cdf0e10cSrcweir 	::lcl_ClearLstBoxAndDelUserData( aTypDLB3 );
301cdf0e10cSrcweir 	delete pColRes;
302cdf0e10cSrcweir }
303cdf0e10cSrcweir 
GetDelimChar() const304cdf0e10cSrcweir sal_Unicode	SwSortDlg::GetDelimChar() const
305cdf0e10cSrcweir {
306cdf0e10cSrcweir     sal_Unicode cRet = '\t';
307cdf0e10cSrcweir 	if( !aDelimTabRB.IsChecked() )
308cdf0e10cSrcweir 	{
309cdf0e10cSrcweir 		String aTmp( aDelimEdt.GetText() );
310cdf0e10cSrcweir 		if( aTmp.Len() )
311cdf0e10cSrcweir             cRet = aTmp.GetChar( 0 );
312cdf0e10cSrcweir 	}
313cdf0e10cSrcweir     return cRet;
314cdf0e10cSrcweir }
315cdf0e10cSrcweir 
316cdf0e10cSrcweir /*--------------------------------------------------------------------
317cdf0e10cSrcweir 	Beschreibung: An die Core weiterreichen
318cdf0e10cSrcweir  --------------------------------------------------------------------*/
Apply()319cdf0e10cSrcweir void SwSortDlg::Apply()
320cdf0e10cSrcweir {
321cdf0e10cSrcweir 	// Alte Einstellung speichern
322cdf0e10cSrcweir 	//
323cdf0e10cSrcweir 	bCheck1 = aKeyCB1.IsChecked();
324cdf0e10cSrcweir 	bCheck2 = aKeyCB2.IsChecked();
325cdf0e10cSrcweir 	bCheck3 = aKeyCB3.IsChecked();
326cdf0e10cSrcweir 
327cdf0e10cSrcweir 	nCol1 = (sal_uInt16)aColEdt1.GetValue();
328cdf0e10cSrcweir 	nCol2 = (sal_uInt16)aColEdt2.GetValue();
329cdf0e10cSrcweir 	nCol3 = (sal_uInt16)aColEdt3.GetValue();
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 	nType1 = aTypDLB1.GetSelectEntryPos();
332cdf0e10cSrcweir 	nType2 = aTypDLB2.GetSelectEntryPos();
333cdf0e10cSrcweir 	nType3 = aTypDLB3.GetSelectEntryPos();
334cdf0e10cSrcweir 
335cdf0e10cSrcweir 	bAsc1 = aSortUpRB.IsChecked();
336cdf0e10cSrcweir 	bAsc2 = aSortUp2RB.IsChecked();
337cdf0e10cSrcweir 	bAsc3 = aSortUp3RB.IsChecked();
338cdf0e10cSrcweir 	bCol = aColumnRB.IsChecked();
339cdf0e10cSrcweir 	nLang = aLangLB.GetSelectLanguage();
340cdf0e10cSrcweir 	cDeli = GetDelimChar();
341cdf0e10cSrcweir 	bCsSens = aCaseCB.IsChecked();
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 	void* pUserData;
344cdf0e10cSrcweir 	SwSortOptions aOptions;
345cdf0e10cSrcweir 	if( bCheck1 )
346cdf0e10cSrcweir 	{
347cdf0e10cSrcweir 		String sEntry( aTypDLB1.GetSelectEntry() );
348cdf0e10cSrcweir 		if( sEntry == aNumericTxt )
349cdf0e10cSrcweir 			sEntry.Erase();
350cdf0e10cSrcweir 		else if( 0 != (pUserData = aTypDLB1.GetEntryData(
351cdf0e10cSrcweir 											aTypDLB1.GetSelectEntryPos())) )
352cdf0e10cSrcweir 			sEntry = *(String*)pUserData;
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 		SwSortKey *pKey = new SwSortKey( nCol1, sEntry,
355cdf0e10cSrcweir 									bAsc1 ? SRT_ASCENDING : SRT_DESCENDING );
356cdf0e10cSrcweir 		aOptions.aKeys.C40_INSERT(SwSortKey, pKey, aOptions.aKeys.Count());
357cdf0e10cSrcweir 	}
358cdf0e10cSrcweir 
359cdf0e10cSrcweir 	if( bCheck2 )
360cdf0e10cSrcweir 	{
361cdf0e10cSrcweir 		String sEntry( aTypDLB2.GetSelectEntry() );
362cdf0e10cSrcweir 		if( sEntry == aNumericTxt )
363cdf0e10cSrcweir 			sEntry.Erase();
364cdf0e10cSrcweir 		else if( 0 != (pUserData = aTypDLB2.GetEntryData(
365cdf0e10cSrcweir 											aTypDLB2.GetSelectEntryPos())) )
366cdf0e10cSrcweir 			sEntry = *(String*)pUserData;
367cdf0e10cSrcweir 
368cdf0e10cSrcweir 		SwSortKey *pKey = new SwSortKey( nCol2, sEntry,
369cdf0e10cSrcweir 									bAsc2 ? SRT_ASCENDING : SRT_DESCENDING );
370cdf0e10cSrcweir 		aOptions.aKeys.C40_INSERT( SwSortKey, pKey, aOptions.aKeys.Count() );
371cdf0e10cSrcweir 	}
372cdf0e10cSrcweir 
373cdf0e10cSrcweir 	if( bCheck3 )
374cdf0e10cSrcweir 	{
375cdf0e10cSrcweir 		String sEntry( aTypDLB3.GetSelectEntry() );
376cdf0e10cSrcweir 		if( sEntry == aNumericTxt )
377cdf0e10cSrcweir 			sEntry.Erase();
378cdf0e10cSrcweir 		else if( 0 != (pUserData = aTypDLB3.GetEntryData(
379cdf0e10cSrcweir 											aTypDLB3.GetSelectEntryPos())) )
380cdf0e10cSrcweir 			sEntry = *(String*)pUserData;
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 		SwSortKey *pKey = new SwSortKey( nCol3, sEntry,
383cdf0e10cSrcweir 									bAsc3 ? SRT_ASCENDING : SRT_DESCENDING );
384cdf0e10cSrcweir 		aOptions.aKeys.C40_INSERT( SwSortKey, pKey, aOptions.aKeys.Count() );
385cdf0e10cSrcweir 	}
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 	aOptions.eDirection =  bCol ? SRT_COLUMNS : SRT_ROWS;
388cdf0e10cSrcweir 	aOptions.cDeli = cDeli;
389cdf0e10cSrcweir 	aOptions.nLanguage = nLang;
390cdf0e10cSrcweir 	aOptions.bTable = rSh.IsTableMode();
391cdf0e10cSrcweir 	aOptions.bIgnoreCase = !bCsSens;
392cdf0e10cSrcweir 
393cdf0e10cSrcweir 	sal_Bool bRet;
394cdf0e10cSrcweir 	{
395*8ef2f12bSOliver-Rainer Wittmann 		SwWait aWait( *rSh.GetView().GetDocShell(), true );
396cdf0e10cSrcweir 		rSh.StartAllAction();
397cdf0e10cSrcweir 		if( 0 != (bRet = rSh.Sort( aOptions )))
398cdf0e10cSrcweir 			rSh.SetModified();
399cdf0e10cSrcweir 		rSh.EndAllAction();
400cdf0e10cSrcweir 	}
401cdf0e10cSrcweir 
402cdf0e10cSrcweir 	if( !bRet )
403cdf0e10cSrcweir 		InfoBox( this->GetParent(), SW_RES(MSG_SRTERR)).Execute();
404cdf0e10cSrcweir }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir /* -----------------30.09.98 10:03-------------------
407cdf0e10cSrcweir  *
408cdf0e10cSrcweir  * --------------------------------------------------*/
IMPL_LINK(SwSortDlg,DelimHdl,RadioButton *,pButton)409cdf0e10cSrcweir IMPL_LINK( SwSortDlg, DelimHdl, RadioButton*, pButton )
410cdf0e10cSrcweir {
411cdf0e10cSrcweir 	sal_Bool bEnable = pButton == &aDelimFreeRB && aDelimFreeRB.IsEnabled();
412cdf0e10cSrcweir 	aDelimEdt.Enable( bEnable );
413cdf0e10cSrcweir 	aDelimPB.Enable( bEnable );
414cdf0e10cSrcweir 	return 0;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir 
IMPL_LINK(SwSortDlg,DelimCharHdl,PushButton *,EMPTYARG)417cdf0e10cSrcweir IMPL_LINK( SwSortDlg, DelimCharHdl, PushButton*, EMPTYARG )
418cdf0e10cSrcweir {
419cdf0e10cSrcweir 	SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
420cdf0e10cSrcweir 	if(pFact)
421cdf0e10cSrcweir 	{
422cdf0e10cSrcweir 		SfxAllItemSet aSet( rSh.GetAttrPool() );
423cdf0e10cSrcweir 		aSet.Put( SfxInt32Item( SID_ATTR_CHAR, GetDelimChar() ) );
424cdf0e10cSrcweir         SfxAbstractDialog* pMap = pFact->CreateSfxDialog( &aDelimPB, aSet,
425cdf0e10cSrcweir 			rSh.GetView().GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP );
426cdf0e10cSrcweir 		if( RET_OK == pMap->Execute() )
427cdf0e10cSrcweir 		{
428cdf0e10cSrcweir 			SFX_ITEMSET_ARG( pMap->GetOutputItemSet(), pItem, SfxInt32Item, SID_ATTR_CHAR, sal_False );
429cdf0e10cSrcweir 			if ( pItem )
430cdf0e10cSrcweir 				aDelimEdt.SetText( sal_Unicode ( pItem->GetValue() ) );
431cdf0e10cSrcweir 		}
432cdf0e10cSrcweir 
433cdf0e10cSrcweir 		delete pMap;
434cdf0e10cSrcweir 	}
435cdf0e10cSrcweir 	return 0;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir 
438cdf0e10cSrcweir 
IMPL_LINK(SwSortDlg,CheckHdl,CheckBox *,pCheck)439cdf0e10cSrcweir IMPL_LINK( SwSortDlg, CheckHdl, CheckBox *, pCheck )
440cdf0e10cSrcweir {
441cdf0e10cSrcweir 	if( pCheck == ( CheckBox* ) &aRowRB)
442cdf0e10cSrcweir 	{
443cdf0e10cSrcweir 		aColLbl.SetText(aColTxt);
444cdf0e10cSrcweir 		aColEdt1.SetMax(nY);
445cdf0e10cSrcweir 		aColEdt2.SetMax(nY);
446cdf0e10cSrcweir 		aColEdt3.SetMax(nY);
447cdf0e10cSrcweir 
448cdf0e10cSrcweir 		aColEdt1.SetAccessibleName(aColTxt);
449cdf0e10cSrcweir 		aColEdt2.SetAccessibleName(aColTxt);
450cdf0e10cSrcweir 		aColEdt3.SetAccessibleName(aColTxt);
451cdf0e10cSrcweir 	}
452cdf0e10cSrcweir 	else if( pCheck == ( CheckBox* ) &aColumnRB)
453cdf0e10cSrcweir 	{
454cdf0e10cSrcweir 		aColLbl.SetText(aRowTxt);
455cdf0e10cSrcweir 		aColEdt1.SetMax(nX);
456cdf0e10cSrcweir 		aColEdt2.SetMax(nX);
457cdf0e10cSrcweir 		aColEdt3.SetMax(nX);
458cdf0e10cSrcweir 
459cdf0e10cSrcweir 		aColEdt1.SetAccessibleName(aRowTxt);
460cdf0e10cSrcweir 		aColEdt2.SetAccessibleName(aRowTxt);
461cdf0e10cSrcweir 		aColEdt3.SetAccessibleName(aRowTxt);
462cdf0e10cSrcweir 	}
463cdf0e10cSrcweir 	else if(!aKeyCB1.IsChecked() &&
464cdf0e10cSrcweir 				!aKeyCB2.IsChecked() &&
465cdf0e10cSrcweir 					!aKeyCB3.IsChecked())
466cdf0e10cSrcweir 		pCheck->Check(sal_True);
467cdf0e10cSrcweir 	return 0;
468cdf0e10cSrcweir }
469cdf0e10cSrcweir 
IMPL_LINK(SwSortDlg,LanguageHdl,ListBox *,pLBox)470cdf0e10cSrcweir IMPL_LINK( SwSortDlg, LanguageHdl, ListBox*, pLBox )
471cdf0e10cSrcweir {
472cdf0e10cSrcweir 	Locale aLcl( SvxCreateLocale( aLangLB.GetSelectLanguage() ) );
473cdf0e10cSrcweir 	Sequence < OUString > aSeq(
474cdf0e10cSrcweir 							GetAppCollator().listCollatorAlgorithms( aLcl ));
475cdf0e10cSrcweir 
476cdf0e10cSrcweir 	if( !pColRes )
477cdf0e10cSrcweir 		pColRes = new CollatorRessource();
478cdf0e10cSrcweir 
479cdf0e10cSrcweir 	const sal_uInt16 nLstBoxCnt = 3;
480cdf0e10cSrcweir 	ListBox* aLstArr[ nLstBoxCnt ] = { &aTypDLB1, &aTypDLB2, &aTypDLB3 };
481cdf0e10cSrcweir 	sal_uInt16* aTypeArr[ nLstBoxCnt ] = { &nType1, &nType2, &nType3 };
482cdf0e10cSrcweir 	String aOldStrArr[ nLstBoxCnt ];
483cdf0e10cSrcweir 	sal_uInt16 n;
484cdf0e10cSrcweir 
485cdf0e10cSrcweir 	void* pUserData;
486cdf0e10cSrcweir 	for( n = 0; n < nLstBoxCnt; ++n )
487cdf0e10cSrcweir 	{
488cdf0e10cSrcweir 		ListBox* pL = aLstArr[ n ];
489cdf0e10cSrcweir 		if( 0 != (pUserData = pL->GetEntryData( pL->GetSelectEntryPos())) )
490cdf0e10cSrcweir 			aOldStrArr[ n ] = *(String*)pUserData;
491cdf0e10cSrcweir 		::lcl_ClearLstBoxAndDelUserData( *pL );
492cdf0e10cSrcweir 	}
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 	sal_uInt16 nInsPos;
495cdf0e10cSrcweir 	String sAlg, sUINm;
496cdf0e10cSrcweir 	for( long nCnt = 0, nEnd = aSeq.getLength(); nCnt <= nEnd; ++nCnt )
497cdf0e10cSrcweir 	{
498cdf0e10cSrcweir 		if( nCnt < nEnd )
499cdf0e10cSrcweir 			sUINm = pColRes->GetTranslation( sAlg = aSeq[ nCnt ] );
500cdf0e10cSrcweir 		else
501cdf0e10cSrcweir 			sUINm = sAlg = aNumericTxt;
502cdf0e10cSrcweir 
503cdf0e10cSrcweir 		for( n = 0; n < nLstBoxCnt; ++n )
504cdf0e10cSrcweir 		{
505cdf0e10cSrcweir 			ListBox* pL = aLstArr[ n ];
506cdf0e10cSrcweir 			nInsPos = pL->InsertEntry( sUINm );
507cdf0e10cSrcweir 			pL->SetEntryData( nInsPos, new String( sAlg ));
508cdf0e10cSrcweir 			if( pLBox && sAlg == aOldStrArr[ n ] )
509cdf0e10cSrcweir 				pL->SelectEntryPos( nInsPos );
510cdf0e10cSrcweir 		}
511cdf0e10cSrcweir 	}
512cdf0e10cSrcweir 
513cdf0e10cSrcweir 	for( n = 0; n < nLstBoxCnt; ++n )
514cdf0e10cSrcweir 	{
515cdf0e10cSrcweir 		ListBox* pL = aLstArr[ n ];
516cdf0e10cSrcweir 		if( !pLBox )
517cdf0e10cSrcweir 			pL->SelectEntryPos( *aTypeArr[n] );
518cdf0e10cSrcweir 		else if( LISTBOX_ENTRY_NOTFOUND == pL->GetSelectEntryPos() )
519cdf0e10cSrcweir 			pL->SelectEntryPos( 0 );
520cdf0e10cSrcweir 	}
521cdf0e10cSrcweir 	return 0;
522cdf0e10cSrcweir }
523cdf0e10cSrcweir 
524cdf0e10cSrcweir 
525cdf0e10cSrcweir 
526cdf0e10cSrcweir 
527cdf0e10cSrcweir 
528cdf0e10cSrcweir 
529