xref: /AOO41X/main/sc/source/ui/miscdlgs/acredlin.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sc.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // System - Includes ---------------------------------------------------------
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #include <svl/undo.hxx>
36*cdf0e10cSrcweir #include <unotools/textsearch.hxx>
37*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx>
38*cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
39*cdf0e10cSrcweir #include <vcl/msgbox.hxx>
40*cdf0e10cSrcweir #include <sfx2/app.hxx>
41*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir // INCLUDE -------------------------------------------------------------------
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir #include "acredlin.hxx"
46*cdf0e10cSrcweir #include "global.hxx"
47*cdf0e10cSrcweir #include "reffact.hxx"
48*cdf0e10cSrcweir #include "document.hxx"
49*cdf0e10cSrcweir #include "docsh.hxx"
50*cdf0e10cSrcweir #include "scresid.hxx"
51*cdf0e10cSrcweir #include "globstr.hrc"
52*cdf0e10cSrcweir #include "acredlin.hrc"
53*cdf0e10cSrcweir #include "simpref.hxx"
54*cdf0e10cSrcweir #include "scmod.hxx"
55*cdf0e10cSrcweir #include "popmenu.hxx"
56*cdf0e10cSrcweir #include "tabvwsh.hxx"
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir // defines -------------------------------------------------------------------
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir #define ABS_SREF		  SCA_VALID \
61*cdf0e10cSrcweir 						| SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE
62*cdf0e10cSrcweir #define ABS_DREF		  ABS_SREF \
63*cdf0e10cSrcweir 						| SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE
64*cdf0e10cSrcweir #define ABS_SREF3D		ABS_SREF | SCA_TAB_3D
65*cdf0e10cSrcweir #define ABS_DREF3D		ABS_DREF | SCA_TAB_3D
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute();
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir inline void EnableDisable( Window& rWin, sal_Bool bEnable )
72*cdf0e10cSrcweir {
73*cdf0e10cSrcweir 	if (bEnable)
74*cdf0e10cSrcweir 		rWin.Enable();
75*cdf0e10cSrcweir 	else
76*cdf0e10cSrcweir 		rWin.Disable();
77*cdf0e10cSrcweir }
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir #define	RD_SPECIAL_NONE			0
80*cdf0e10cSrcweir #define	RD_SPECIAL_CONTENT		1
81*cdf0e10cSrcweir #define	RD_SPECIAL_VISCONTENT	2
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir //============================================================================
84*cdf0e10cSrcweir //	class ScRedlinData
85*cdf0e10cSrcweir //----------------------------------------------------------------------------
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir ScRedlinData::ScRedlinData()
88*cdf0e10cSrcweir 	:RedlinData()
89*cdf0e10cSrcweir {
90*cdf0e10cSrcweir 	nInfo=RD_SPECIAL_NONE;
91*cdf0e10cSrcweir 	nActionNo=0;
92*cdf0e10cSrcweir 	pData=NULL;
93*cdf0e10cSrcweir 	bDisabled=sal_False;
94*cdf0e10cSrcweir 	bIsRejectable=sal_False;
95*cdf0e10cSrcweir 	bIsAcceptable=sal_False;
96*cdf0e10cSrcweir 	nTable=SCTAB_MAX;
97*cdf0e10cSrcweir 	nCol=SCCOL_MAX;
98*cdf0e10cSrcweir 	nRow=SCROW_MAX;
99*cdf0e10cSrcweir }
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir ScRedlinData::~ScRedlinData()
102*cdf0e10cSrcweir {
103*cdf0e10cSrcweir 	nInfo=RD_SPECIAL_NONE;
104*cdf0e10cSrcweir 	nActionNo=0;
105*cdf0e10cSrcweir 	pData=NULL;
106*cdf0e10cSrcweir 	bDisabled=sal_False;
107*cdf0e10cSrcweir 	bIsRejectable=sal_False;
108*cdf0e10cSrcweir 	bIsAcceptable=sal_False;
109*cdf0e10cSrcweir }
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir //============================================================================
113*cdf0e10cSrcweir //	class ScAcceptChgDlg
114*cdf0e10cSrcweir //----------------------------------------------------------------------------
115*cdf0e10cSrcweir ScAcceptChgDlg::ScAcceptChgDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
116*cdf0e10cSrcweir 					  ScViewData*		ptrViewData)
117*cdf0e10cSrcweir 
118*cdf0e10cSrcweir 	:	SfxModelessDialog( pB, pCW, pParent, ScResId(RID_SCDLG_CHANGES) ),
119*cdf0e10cSrcweir 		//
120*cdf0e10cSrcweir 		aAcceptChgCtr			( this, ScResId( CTR_REDLINING ) ),
121*cdf0e10cSrcweir 		//
122*cdf0e10cSrcweir 		pViewData		( ptrViewData ),
123*cdf0e10cSrcweir 		pDoc			( ptrViewData->GetDocument() ),
124*cdf0e10cSrcweir 		aLocalRangeName ( *(pDoc->GetRangeName()) ),
125*cdf0e10cSrcweir 		//
126*cdf0e10cSrcweir 		aStrInsertCols			( ScResId( STR_INSERT_COLS)),
127*cdf0e10cSrcweir 		aStrInsertRows			( ScResId( STR_INSERT_ROWS)),
128*cdf0e10cSrcweir 		aStrInsertTabs			( ScResId( STR_INSERT_TABS)),
129*cdf0e10cSrcweir 		aStrDeleteCols			( ScResId( STR_DELETE_COLS)),
130*cdf0e10cSrcweir 		aStrDeleteRows			( ScResId( STR_DELETE_ROWS)),
131*cdf0e10cSrcweir 		aStrDeleteTabs			( ScResId( STR_DELETE_TABS)),
132*cdf0e10cSrcweir 		aStrMove				( ScResId( STR_MOVE	    )),
133*cdf0e10cSrcweir 		aStrContent				( ScResId( STR_CONTENT	)),
134*cdf0e10cSrcweir 		aStrReject				( ScResId( STR_REJECT	    )),
135*cdf0e10cSrcweir 		aStrAllAccepted			( ScResId( STR_ACCEPTED	)),
136*cdf0e10cSrcweir 		aStrAllRejected			( ScResId( STR_REJECTED	)),
137*cdf0e10cSrcweir 		aStrNoEntry				( ScResId( STR_NO_ENTRY   )),
138*cdf0e10cSrcweir 		aStrContentWithChild	( ScResId( STR_CONTENT_WITH_CHILD)),
139*cdf0e10cSrcweir 		aStrChildContent		( ScResId( STR_CHILD_CONTENT)),
140*cdf0e10cSrcweir 		aStrChildOrgContent		( ScResId( STR_CHILD_ORGCONTENT)),
141*cdf0e10cSrcweir 		aStrEmpty				( ScResId( STR_EMPTY		))
142*cdf0e10cSrcweir {
143*cdf0e10cSrcweir 	FreeResource();
144*cdf0e10cSrcweir //	bScAcceptChgDlgIsDead=sal_False;
145*cdf0e10cSrcweir 	bNoSelection=sal_False;
146*cdf0e10cSrcweir 	bNeedsUpdate=sal_False;
147*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
148*cdf0e10cSrcweir 	nAcceptCount=0;
149*cdf0e10cSrcweir 	nRejectCount=0;
150*cdf0e10cSrcweir 	bAcceptEnableFlag=sal_True;
151*cdf0e10cSrcweir 	bRejectEnableFlag=sal_True;
152*cdf0e10cSrcweir 	bHasFilterEntry=sal_False;
153*cdf0e10cSrcweir 	bUseColor=sal_False;
154*cdf0e10cSrcweir 	aReOpenTimer.SetTimeout(50);
155*cdf0e10cSrcweir 	aReOpenTimer.SetTimeoutHdl(LINK( this, ScAcceptChgDlg, ReOpenTimerHdl ));
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir 	//	dialog is now only hidden, not deleted, on switching views,
158*cdf0e10cSrcweir 	//	so there's no need to restore settings when reopening
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir 	MinSize=aAcceptChgCtr.GetMinSizePixel();
161*cdf0e10cSrcweir 	MinSize.Height()+=2;
162*cdf0e10cSrcweir 	MinSize.Width()+=2;
163*cdf0e10cSrcweir 	SetMinOutputSizePixel(MinSize);
164*cdf0e10cSrcweir 	aUnknown.AssignAscii(RTL_CONSTASCII_STRINGPARAM("Unknown"));
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir 	pTPFilter=aAcceptChgCtr.GetFilterPage();
167*cdf0e10cSrcweir 	pTPView=aAcceptChgCtr.GetViewPage();
168*cdf0e10cSrcweir 	pTheView=pTPView->GetTableControl();
169*cdf0e10cSrcweir 	aSelectionTimer.SetTimeout(100);
170*cdf0e10cSrcweir 	aSelectionTimer.SetTimeoutHdl(LINK( this, ScAcceptChgDlg, UpdateSelectionHdl ));
171*cdf0e10cSrcweir 
172*cdf0e10cSrcweir 	pTPFilter->SetReadyHdl(LINK( this, ScAcceptChgDlg, FilterHandle ));
173*cdf0e10cSrcweir 	pTPFilter->SetRefHdl(LINK( this, ScAcceptChgDlg, RefHandle ));
174*cdf0e10cSrcweir 	pTPFilter->SetModifyHdl(LINK( this, ScAcceptChgDlg, FilterModified));
175*cdf0e10cSrcweir 	pTPFilter->HideRange(sal_False);
176*cdf0e10cSrcweir 	pTPView->InsertCalcHeader();
177*cdf0e10cSrcweir 	pTPView->SetRejectClickHdl( LINK( this, ScAcceptChgDlg,RejectHandle));
178*cdf0e10cSrcweir 	pTPView->SetAcceptClickHdl( LINK(this, ScAcceptChgDlg, AcceptHandle));
179*cdf0e10cSrcweir 	pTPView->SetRejectAllClickHdl( LINK( this, ScAcceptChgDlg,RejectAllHandle));
180*cdf0e10cSrcweir 	pTPView->SetAcceptAllClickHdl( LINK(this, ScAcceptChgDlg, AcceptAllHandle));
181*cdf0e10cSrcweir 	pTheView->SetCalcView();
182*cdf0e10cSrcweir 	pTheView->SetStyle(pTheView->GetStyle()|WB_HASLINES|WB_CLIPCHILDREN|WB_HASBUTTONS|WB_HASBUTTONSATROOT|WB_HSCROLL);
183*cdf0e10cSrcweir 	pTheView->SetExpandingHdl( LINK(this, ScAcceptChgDlg, ExpandingHandle));
184*cdf0e10cSrcweir 	pTheView->SetSelectHdl( LINK(this, ScAcceptChgDlg, SelectHandle));
185*cdf0e10cSrcweir 	pTheView->SetDeselectHdl( LINK(this, ScAcceptChgDlg, SelectHandle));
186*cdf0e10cSrcweir 	pTheView->SetCommandHdl( LINK(this, ScAcceptChgDlg, CommandHdl));
187*cdf0e10cSrcweir 	pTheView->SetColCompareHdl( LINK(this, ScAcceptChgDlg,ColCompareHdl));
188*cdf0e10cSrcweir 	pTheView->SetSelectionMode(MULTIPLE_SELECTION);
189*cdf0e10cSrcweir 	pTheView->SetHighlightRange(1);
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir 	Init();
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir 	aAcceptChgCtr.SetMinSizeHdl( LINK( this, ScAcceptChgDlg, MinSizeHandle ));
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir 	UpdateView();
196*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=pTheView->First();
197*cdf0e10cSrcweir 	if(pEntry!=NULL)
198*cdf0e10cSrcweir 	{
199*cdf0e10cSrcweir 		pTheView->Select(pEntry);
200*cdf0e10cSrcweir 	}
201*cdf0e10cSrcweir }
202*cdf0e10cSrcweir ScAcceptChgDlg::~ScAcceptChgDlg()
203*cdf0e10cSrcweir {
204*cdf0e10cSrcweir //	bScAcceptChgDlgIsDead=sal_True;
205*cdf0e10cSrcweir 	ClearView();
206*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir 	if(pChanges!=NULL)
209*cdf0e10cSrcweir 	{
210*cdf0e10cSrcweir 		Link aLink;
211*cdf0e10cSrcweir 		pChanges->SetModifiedLink(aLink);
212*cdf0e10cSrcweir 	}
213*cdf0e10cSrcweir }
214*cdf0e10cSrcweir 
215*cdf0e10cSrcweir void ScAcceptChgDlg::ReInit(ScViewData* ptrViewData)
216*cdf0e10cSrcweir {
217*cdf0e10cSrcweir 	pViewData=ptrViewData;
218*cdf0e10cSrcweir 	if(pViewData!=NULL)
219*cdf0e10cSrcweir 	{
220*cdf0e10cSrcweir 		pDoc=ptrViewData->GetDocument();
221*cdf0e10cSrcweir 	}
222*cdf0e10cSrcweir 	else
223*cdf0e10cSrcweir 	{
224*cdf0e10cSrcweir 		pDoc=NULL;
225*cdf0e10cSrcweir 	}
226*cdf0e10cSrcweir 
227*cdf0e10cSrcweir 	bNoSelection=sal_False;
228*cdf0e10cSrcweir 	bNeedsUpdate=sal_False;
229*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
230*cdf0e10cSrcweir 	nAcceptCount=0;
231*cdf0e10cSrcweir 	nRejectCount=0;
232*cdf0e10cSrcweir 	bAcceptEnableFlag=sal_True;
233*cdf0e10cSrcweir 	bRejectEnableFlag=sal_True;
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir 	//	#91781# don't call Init here (switching between views), just set link below
236*cdf0e10cSrcweir 	//	(dialog is just hidden, not deleted anymore, when switching views)
237*cdf0e10cSrcweir 	ClearView();
238*cdf0e10cSrcweir 	UpdateView();
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir 	if ( pDoc )
241*cdf0e10cSrcweir 	{
242*cdf0e10cSrcweir 		ScChangeTrack* pChanges = pDoc->GetChangeTrack();
243*cdf0e10cSrcweir 		if ( pChanges )
244*cdf0e10cSrcweir 			pChanges->SetModifiedLink( LINK( this, ScAcceptChgDlg, ChgTrackModHdl ) );
245*cdf0e10cSrcweir 	}
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir 
248*cdf0e10cSrcweir void __EXPORT ScAcceptChgDlg::Init()
249*cdf0e10cSrcweir {
250*cdf0e10cSrcweir 	String	aAreaStr;
251*cdf0e10cSrcweir 	ScRange aRange;
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir 	DBG_ASSERT( pViewData && pDoc, "ViewData oder Document nicht gefunden!" );
254*cdf0e10cSrcweir 
255*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir 	if(pChanges!=NULL)
258*cdf0e10cSrcweir 	{
259*cdf0e10cSrcweir 		pChanges->SetModifiedLink( LINK( this, ScAcceptChgDlg,ChgTrackModHdl));
260*cdf0e10cSrcweir 		aChangeViewSet.SetTheAuthorToShow(pChanges->GetUser());
261*cdf0e10cSrcweir 		pTPFilter->ClearAuthors();
262*cdf0e10cSrcweir 		ScStrCollection aUserColl=pChanges->GetUserCollection();
263*cdf0e10cSrcweir 		for(sal_uInt16	i=0;i<aUserColl.GetCount();i++)
264*cdf0e10cSrcweir 			pTPFilter->InsertAuthor(aUserColl[i]->GetString());
265*cdf0e10cSrcweir 	}
266*cdf0e10cSrcweir 
267*cdf0e10cSrcweir 	ScChangeViewSettings* pViewSettings=pDoc->GetChangeViewSettings();
268*cdf0e10cSrcweir 	if ( pViewSettings!=NULL )
269*cdf0e10cSrcweir 		aChangeViewSet = *pViewSettings;
270*cdf0e10cSrcweir     // adjust TimeField for filter tabpage
271*cdf0e10cSrcweir     aChangeViewSet.AdjustDateMode( *pDoc );
272*cdf0e10cSrcweir 
273*cdf0e10cSrcweir 	pTPFilter->CheckDate(aChangeViewSet.HasDate());
274*cdf0e10cSrcweir 	pTPFilter->SetFirstDate(aChangeViewSet.GetTheFirstDateTime());
275*cdf0e10cSrcweir 	pTPFilter->SetFirstTime(aChangeViewSet.GetTheFirstDateTime());
276*cdf0e10cSrcweir 	pTPFilter->SetLastDate(aChangeViewSet.GetTheLastDateTime());
277*cdf0e10cSrcweir 	pTPFilter->SetLastTime(aChangeViewSet.GetTheLastDateTime());
278*cdf0e10cSrcweir 	pTPFilter->SetDateMode((sal_uInt16)aChangeViewSet.GetTheDateMode());
279*cdf0e10cSrcweir 	pTPFilter->CheckComment(aChangeViewSet.HasComment());
280*cdf0e10cSrcweir 	pTPFilter->SetComment(aChangeViewSet.GetTheComment());
281*cdf0e10cSrcweir 
282*cdf0e10cSrcweir 	pTPFilter->CheckAuthor(aChangeViewSet.HasAuthor());
283*cdf0e10cSrcweir 	String aString=aChangeViewSet.GetTheAuthorToShow();
284*cdf0e10cSrcweir 	if(aString.Len()!=0)
285*cdf0e10cSrcweir 	{
286*cdf0e10cSrcweir 		pTPFilter->SelectAuthor(aString);
287*cdf0e10cSrcweir 		if(pTPFilter->GetSelectedAuthor()!=aString)
288*cdf0e10cSrcweir 		{
289*cdf0e10cSrcweir 			pTPFilter->InsertAuthor(aString);
290*cdf0e10cSrcweir 			pTPFilter->SelectAuthor(aString);
291*cdf0e10cSrcweir 		}
292*cdf0e10cSrcweir 	}
293*cdf0e10cSrcweir 	else
294*cdf0e10cSrcweir 	{
295*cdf0e10cSrcweir 		pTPFilter->SelectedAuthorPos(0);
296*cdf0e10cSrcweir 	}
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir 	pTPFilter->CheckRange(aChangeViewSet.HasRange());
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir 	ScRange* pRangeEntry=aChangeViewSet.GetTheRangeList().GetObject(0);
301*cdf0e10cSrcweir 	aRangeList=aChangeViewSet.GetTheRangeList();
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir 	if(pRangeEntry!=NULL)
304*cdf0e10cSrcweir 	{
305*cdf0e10cSrcweir 		String aRefStr;
306*cdf0e10cSrcweir 		pRangeEntry->Format( aRefStr, ABS_DREF3D, pDoc );
307*cdf0e10cSrcweir 		pTPFilter->SetRange(aRefStr);
308*cdf0e10cSrcweir 	}
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir 	Point aPoint(1,1);
311*cdf0e10cSrcweir 	aAcceptChgCtr.SetPosPixel(aPoint);
312*cdf0e10cSrcweir 	InitFilter();
313*cdf0e10cSrcweir }
314*cdf0e10cSrcweir 
315*cdf0e10cSrcweir 
316*cdf0e10cSrcweir 
317*cdf0e10cSrcweir void ScAcceptChgDlg::ClearView()
318*cdf0e10cSrcweir {
319*cdf0e10cSrcweir 	nAcceptCount=0;
320*cdf0e10cSrcweir 	nRejectCount=0;
321*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_False);
322*cdf0e10cSrcweir 
323*cdf0e10cSrcweir 	pTheView->Clear();
324*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_True);
325*cdf0e10cSrcweir }
326*cdf0e10cSrcweir 
327*cdf0e10cSrcweir String* ScAcceptChgDlg::MakeTypeString(ScChangeActionType eType)
328*cdf0e10cSrcweir {
329*cdf0e10cSrcweir 	String* pStr;
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir 	switch(eType)
332*cdf0e10cSrcweir 	{
333*cdf0e10cSrcweir 
334*cdf0e10cSrcweir 		case SC_CAT_INSERT_COLS:	pStr=&aStrInsertCols;break;
335*cdf0e10cSrcweir 
336*cdf0e10cSrcweir 		case SC_CAT_INSERT_ROWS:	pStr=&aStrInsertRows;break;
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir 		case SC_CAT_INSERT_TABS:	pStr=&aStrInsertTabs;break;
339*cdf0e10cSrcweir 
340*cdf0e10cSrcweir 		case SC_CAT_DELETE_COLS:	pStr=&aStrDeleteCols;break;
341*cdf0e10cSrcweir 
342*cdf0e10cSrcweir 		case SC_CAT_DELETE_ROWS:	pStr=&aStrDeleteRows;break;
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir 		case SC_CAT_DELETE_TABS:	pStr=&aStrDeleteTabs;break;
345*cdf0e10cSrcweir 
346*cdf0e10cSrcweir 		case SC_CAT_MOVE:			pStr=&aStrMove;break;
347*cdf0e10cSrcweir 
348*cdf0e10cSrcweir 		case SC_CAT_CONTENT:		pStr=&aStrContent;break;
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir 		case SC_CAT_REJECT:			pStr=&aStrReject;break;
351*cdf0e10cSrcweir 
352*cdf0e10cSrcweir 		default:					pStr=&aUnknown;break;
353*cdf0e10cSrcweir 	}
354*cdf0e10cSrcweir 	return pStr;
355*cdf0e10cSrcweir }
356*cdf0e10cSrcweir 
357*cdf0e10cSrcweir 
358*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::IsValidAction(const ScChangeAction* pScChangeAction)
359*cdf0e10cSrcweir {
360*cdf0e10cSrcweir 	if(pScChangeAction==NULL) return sal_False;
361*cdf0e10cSrcweir 
362*cdf0e10cSrcweir 	sal_Bool bFlag=sal_False;
363*cdf0e10cSrcweir 
364*cdf0e10cSrcweir 	ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
365*cdf0e10cSrcweir 	String aUser=pScChangeAction->GetUser();
366*cdf0e10cSrcweir 	DateTime aDateTime=pScChangeAction->GetDateTime();
367*cdf0e10cSrcweir 
368*cdf0e10cSrcweir 	ScChangeActionType eType=pScChangeAction->GetType();
369*cdf0e10cSrcweir 	String aString;
370*cdf0e10cSrcweir 	String aDesc;
371*cdf0e10cSrcweir 
372*cdf0e10cSrcweir 	String aComment=pScChangeAction->GetComment();
373*cdf0e10cSrcweir 	aComment.EraseAllChars('\n');
374*cdf0e10cSrcweir 
375*cdf0e10cSrcweir 	if(eType==SC_CAT_CONTENT)
376*cdf0e10cSrcweir 	{
377*cdf0e10cSrcweir 		if(!pScChangeAction->IsDialogParent())
378*cdf0e10cSrcweir 		{
379*cdf0e10cSrcweir 			pScChangeAction->GetDescription( aDesc, pDoc, sal_True);
380*cdf0e10cSrcweir 		}
381*cdf0e10cSrcweir 	}
382*cdf0e10cSrcweir 	else
383*cdf0e10cSrcweir 	{
384*cdf0e10cSrcweir 		pScChangeAction->GetDescription( aDesc, pDoc,!pScChangeAction->IsMasterDelete());
385*cdf0e10cSrcweir 	}
386*cdf0e10cSrcweir 
387*cdf0e10cSrcweir 	if(aDesc.Len()>0)
388*cdf0e10cSrcweir 	{
389*cdf0e10cSrcweir 		aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " (" ));
390*cdf0e10cSrcweir 		aComment+=aDesc;
391*cdf0e10cSrcweir 		aComment+=')';
392*cdf0e10cSrcweir 	}
393*cdf0e10cSrcweir 
394*cdf0e10cSrcweir 	if(pTheView->IsValidEntry(&aUser,&aDateTime,&aComment))
395*cdf0e10cSrcweir 	{
396*cdf0e10cSrcweir 		if(pTPFilter->IsRange())
397*cdf0e10cSrcweir 		{
398*cdf0e10cSrcweir 			ScRange* pRangeEntry=aRangeList.First();
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir 			while(pRangeEntry!=NULL)
401*cdf0e10cSrcweir 			{
402*cdf0e10cSrcweir 				if(pRangeEntry->Intersects(aRef)) break;
403*cdf0e10cSrcweir 				pRangeEntry=aRangeList.Next();
404*cdf0e10cSrcweir 			}
405*cdf0e10cSrcweir 
406*cdf0e10cSrcweir 			if(pRangeEntry!=NULL)
407*cdf0e10cSrcweir 			{
408*cdf0e10cSrcweir 				bFlag=sal_True;
409*cdf0e10cSrcweir 			}
410*cdf0e10cSrcweir 		}
411*cdf0e10cSrcweir 		else
412*cdf0e10cSrcweir 		{
413*cdf0e10cSrcweir 			bFlag=sal_True;
414*cdf0e10cSrcweir 		}
415*cdf0e10cSrcweir 	}
416*cdf0e10cSrcweir 
417*cdf0e10cSrcweir 	return bFlag;
418*cdf0e10cSrcweir }
419*cdf0e10cSrcweir 
420*cdf0e10cSrcweir SvLBoxEntry* ScAcceptChgDlg::InsertChangeAction(const ScChangeAction* pScChangeAction,
421*cdf0e10cSrcweir                                                    ScChangeActionState /* eState */, SvLBoxEntry* pParent,
422*cdf0e10cSrcweir 												   sal_Bool bDelMaster,sal_Bool bDisabled,sal_uLong nPos)
423*cdf0e10cSrcweir {
424*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
425*cdf0e10cSrcweir 
426*cdf0e10cSrcweir 	if(pScChangeAction==NULL || pChanges==NULL) return NULL;
427*cdf0e10cSrcweir 
428*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
429*cdf0e10cSrcweir 
430*cdf0e10cSrcweir 	sal_Bool bFlag=sal_False;
431*cdf0e10cSrcweir 
432*cdf0e10cSrcweir 	ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
433*cdf0e10cSrcweir 	String aUser=pScChangeAction->GetUser();
434*cdf0e10cSrcweir 	DateTime aDateTime=pScChangeAction->GetDateTime();
435*cdf0e10cSrcweir 
436*cdf0e10cSrcweir 	String aRefStr;
437*cdf0e10cSrcweir 	ScChangeActionType eType=pScChangeAction->GetType();
438*cdf0e10cSrcweir 	String aString;
439*cdf0e10cSrcweir 	String aDesc;
440*cdf0e10cSrcweir 
441*cdf0e10cSrcweir 	ScRedlinData* pNewData=new ScRedlinData;
442*cdf0e10cSrcweir 	pNewData->pData=(void *)pScChangeAction;
443*cdf0e10cSrcweir 	pNewData->nActionNo=pScChangeAction->GetActionNumber();
444*cdf0e10cSrcweir 	pNewData->bIsAcceptable=pScChangeAction->IsClickable();
445*cdf0e10cSrcweir 	pNewData->bIsRejectable=pScChangeAction->IsRejectable();
446*cdf0e10cSrcweir 	pNewData->bDisabled=!pNewData->bIsAcceptable | bDisabled;
447*cdf0e10cSrcweir 	pNewData->aDateTime=aDateTime;
448*cdf0e10cSrcweir 	pNewData->nRow	= aRef.aStart.Row();
449*cdf0e10cSrcweir 	pNewData->nCol	= aRef.aStart.Col();
450*cdf0e10cSrcweir 	pNewData->nTable= aRef.aStart.Tab();
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir 	if(eType==SC_CAT_CONTENT)
453*cdf0e10cSrcweir 	{
454*cdf0e10cSrcweir 		if(pScChangeAction->IsDialogParent())
455*cdf0e10cSrcweir 		{
456*cdf0e10cSrcweir 			aString=aStrContentWithChild;
457*cdf0e10cSrcweir 			pNewData->nInfo=RD_SPECIAL_VISCONTENT;
458*cdf0e10cSrcweir 			pNewData->bIsRejectable=sal_False;
459*cdf0e10cSrcweir 			pNewData->bIsAcceptable=sal_False;
460*cdf0e10cSrcweir 		}
461*cdf0e10cSrcweir 		else
462*cdf0e10cSrcweir 		{
463*cdf0e10cSrcweir 			aString=*MakeTypeString(eType);
464*cdf0e10cSrcweir 			pScChangeAction->GetDescription( aDesc, pDoc, sal_True);
465*cdf0e10cSrcweir 		}
466*cdf0e10cSrcweir 	}
467*cdf0e10cSrcweir 	else
468*cdf0e10cSrcweir 	{
469*cdf0e10cSrcweir 		aString=*MakeTypeString(eType);
470*cdf0e10cSrcweir 
471*cdf0e10cSrcweir 		if(bDelMaster)
472*cdf0e10cSrcweir 		{
473*cdf0e10cSrcweir 			pScChangeAction->GetDescription( aDesc, pDoc,sal_True);
474*cdf0e10cSrcweir 			pNewData->bDisabled=sal_True;
475*cdf0e10cSrcweir 			pNewData->bIsRejectable=sal_False;
476*cdf0e10cSrcweir 		}
477*cdf0e10cSrcweir 		else
478*cdf0e10cSrcweir 			pScChangeAction->GetDescription( aDesc, pDoc,!pScChangeAction->IsMasterDelete());
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir 	}
481*cdf0e10cSrcweir 
482*cdf0e10cSrcweir 	aString+='\t';
483*cdf0e10cSrcweir 	pScChangeAction->GetRefString(aRefStr, pDoc, sal_True);
484*cdf0e10cSrcweir 	aString+=aRefStr;
485*cdf0e10cSrcweir 	aString+='\t';
486*cdf0e10cSrcweir 
487*cdf0e10cSrcweir 	sal_Bool bIsGenerated;
488*cdf0e10cSrcweir 
489*cdf0e10cSrcweir 	if(!pChanges->IsGenerated(pScChangeAction->GetActionNumber()))
490*cdf0e10cSrcweir 	{
491*cdf0e10cSrcweir 		aString+=aUser;
492*cdf0e10cSrcweir 		aString+='\t';
493*cdf0e10cSrcweir 
494*cdf0e10cSrcweir         aString+=ScGlobal::pLocaleData->getDate(aDateTime);
495*cdf0e10cSrcweir 		aString+=' ';
496*cdf0e10cSrcweir         aString+=ScGlobal::pLocaleData->getTime(aDateTime);
497*cdf0e10cSrcweir 		aString+='\t';
498*cdf0e10cSrcweir 		bIsGenerated=sal_False;
499*cdf0e10cSrcweir 	}
500*cdf0e10cSrcweir 	else
501*cdf0e10cSrcweir 	{
502*cdf0e10cSrcweir 		aString+='\t';
503*cdf0e10cSrcweir 		aString+='\t';
504*cdf0e10cSrcweir 		bIsGenerated=sal_True;
505*cdf0e10cSrcweir 	}
506*cdf0e10cSrcweir 
507*cdf0e10cSrcweir 	String aComment=pScChangeAction->GetComment();
508*cdf0e10cSrcweir 	aComment.EraseAllChars('\n');
509*cdf0e10cSrcweir 	if(aDesc.Len()>0)
510*cdf0e10cSrcweir 	{
511*cdf0e10cSrcweir 		aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " (" ));
512*cdf0e10cSrcweir 		aComment+=aDesc;
513*cdf0e10cSrcweir 		aComment+=')';
514*cdf0e10cSrcweir 	}
515*cdf0e10cSrcweir 
516*cdf0e10cSrcweir 	aString+=aComment;
517*cdf0e10cSrcweir 
518*cdf0e10cSrcweir 	if(pTheView->IsValidEntry(&aUser,&aDateTime)|| bIsGenerated)
519*cdf0e10cSrcweir 	{
520*cdf0e10cSrcweir 		if(pTheView->IsValidComment(&aComment))
521*cdf0e10cSrcweir 		{
522*cdf0e10cSrcweir 			if(pTPFilter->IsRange())
523*cdf0e10cSrcweir 			{
524*cdf0e10cSrcweir 				ScRange* pRangeEntry=aRangeList.First();
525*cdf0e10cSrcweir 
526*cdf0e10cSrcweir 				while(pRangeEntry!=NULL)
527*cdf0e10cSrcweir 				{
528*cdf0e10cSrcweir 					if(pRangeEntry->Intersects(aRef)) break;
529*cdf0e10cSrcweir 					pRangeEntry=aRangeList.Next();
530*cdf0e10cSrcweir 				}
531*cdf0e10cSrcweir 				//SC_CAS_VIRGIN,SC_CAS_ACCEPTED,SC_CAS_REJECTED
532*cdf0e10cSrcweir 				if(pRangeEntry!=NULL)
533*cdf0e10cSrcweir 				{
534*cdf0e10cSrcweir 					bHasFilterEntry=sal_True;
535*cdf0e10cSrcweir 					bFlag=sal_True;
536*cdf0e10cSrcweir 				}
537*cdf0e10cSrcweir 			}
538*cdf0e10cSrcweir 			else if(!bIsGenerated)
539*cdf0e10cSrcweir 			{
540*cdf0e10cSrcweir 				bHasFilterEntry=sal_True;
541*cdf0e10cSrcweir 				bFlag=sal_True;
542*cdf0e10cSrcweir 			}
543*cdf0e10cSrcweir 		}
544*cdf0e10cSrcweir 	}
545*cdf0e10cSrcweir 
546*cdf0e10cSrcweir 	if(!bFlag&& bUseColor&& pParent==NULL)
547*cdf0e10cSrcweir 	{
548*cdf0e10cSrcweir 		pEntry=pTheView->InsertEntry(aString,pNewData,Color(COL_LIGHTBLUE),pParent,nPos);
549*cdf0e10cSrcweir 	}
550*cdf0e10cSrcweir 	else if(bFlag&& bUseColor&& pParent!=NULL)
551*cdf0e10cSrcweir 	{
552*cdf0e10cSrcweir 		pEntry=pTheView->InsertEntry(aString,pNewData,Color(COL_GREEN),pParent,nPos);
553*cdf0e10cSrcweir 		SvLBoxEntry* pExpEntry=pParent;
554*cdf0e10cSrcweir 
555*cdf0e10cSrcweir 		while(pExpEntry!=NULL && !pTheView->IsExpanded(pExpEntry))
556*cdf0e10cSrcweir 		{
557*cdf0e10cSrcweir 			SvLBoxEntry* pTmpEntry=pTheView->GetParent(pExpEntry);
558*cdf0e10cSrcweir 
559*cdf0e10cSrcweir 			if(pTmpEntry!=NULL) pTheView->Expand(pExpEntry);
560*cdf0e10cSrcweir 
561*cdf0e10cSrcweir 			pExpEntry=pTmpEntry;
562*cdf0e10cSrcweir 		}
563*cdf0e10cSrcweir 	}
564*cdf0e10cSrcweir 	else
565*cdf0e10cSrcweir 	{
566*cdf0e10cSrcweir 		pEntry=pTheView->InsertEntry(aString,pNewData,pParent,nPos);
567*cdf0e10cSrcweir 	}
568*cdf0e10cSrcweir 	return pEntry;
569*cdf0e10cSrcweir }
570*cdf0e10cSrcweir 
571*cdf0e10cSrcweir SvLBoxEntry* ScAcceptChgDlg::InsertFilteredAction(const ScChangeAction* pScChangeAction,
572*cdf0e10cSrcweir 												   ScChangeActionState eState,SvLBoxEntry* pParent,
573*cdf0e10cSrcweir 												   sal_Bool bDelMaster,sal_Bool bDisabled,sal_uLong nPos)
574*cdf0e10cSrcweir {
575*cdf0e10cSrcweir 
576*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
577*cdf0e10cSrcweir 
578*cdf0e10cSrcweir 	if(pScChangeAction==NULL || pChanges==NULL) return NULL;
579*cdf0e10cSrcweir 
580*cdf0e10cSrcweir 	sal_Bool bIsGenerated=pChanges->IsGenerated(pScChangeAction->GetActionNumber());
581*cdf0e10cSrcweir 
582*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
583*cdf0e10cSrcweir 
584*cdf0e10cSrcweir 	int bFlag=sal_False;
585*cdf0e10cSrcweir 
586*cdf0e10cSrcweir 	ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
587*cdf0e10cSrcweir 	String aUser=pScChangeAction->GetUser();
588*cdf0e10cSrcweir 	DateTime aDateTime=pScChangeAction->GetDateTime();
589*cdf0e10cSrcweir 
590*cdf0e10cSrcweir 	if(pTheView->IsValidEntry(&aUser,&aDateTime)||bIsGenerated)
591*cdf0e10cSrcweir 	{
592*cdf0e10cSrcweir 		if(pTPFilter->IsRange())
593*cdf0e10cSrcweir 		{
594*cdf0e10cSrcweir 			ScRange* pRangeEntry=aRangeList.First();
595*cdf0e10cSrcweir 
596*cdf0e10cSrcweir 			while(pRangeEntry!=NULL)
597*cdf0e10cSrcweir 			{
598*cdf0e10cSrcweir 				if(pRangeEntry->Intersects(aRef)) break;
599*cdf0e10cSrcweir 				pRangeEntry=aRangeList.Next();
600*cdf0e10cSrcweir 			}
601*cdf0e10cSrcweir 			//SC_CAS_VIRGIN,SC_CAS_ACCEPTED,SC_CAS_REJECTED
602*cdf0e10cSrcweir 			if(pRangeEntry!=NULL &&
603*cdf0e10cSrcweir 				pScChangeAction->GetState()==eState)
604*cdf0e10cSrcweir 			{
605*cdf0e10cSrcweir 				bFlag=sal_True;
606*cdf0e10cSrcweir 			}
607*cdf0e10cSrcweir 		}
608*cdf0e10cSrcweir 		else if(pScChangeAction->GetState()==eState && !bIsGenerated)
609*cdf0e10cSrcweir 		{
610*cdf0e10cSrcweir 			bFlag=sal_True;
611*cdf0e10cSrcweir 		}
612*cdf0e10cSrcweir 	}
613*cdf0e10cSrcweir 
614*cdf0e10cSrcweir 	if(bFlag)
615*cdf0e10cSrcweir 	{
616*cdf0e10cSrcweir 
617*cdf0e10cSrcweir 		String aRefStr;
618*cdf0e10cSrcweir 		ScChangeActionType eType=pScChangeAction->GetType();
619*cdf0e10cSrcweir 		String aString;
620*cdf0e10cSrcweir 		String aDesc;
621*cdf0e10cSrcweir 
622*cdf0e10cSrcweir 
623*cdf0e10cSrcweir 		ScRedlinData* pNewData=new ScRedlinData;
624*cdf0e10cSrcweir 		pNewData->pData=(void *)pScChangeAction;
625*cdf0e10cSrcweir 		pNewData->nActionNo=pScChangeAction->GetActionNumber();
626*cdf0e10cSrcweir 		pNewData->bIsAcceptable=pScChangeAction->IsClickable();
627*cdf0e10cSrcweir 		pNewData->bIsRejectable=pScChangeAction->IsRejectable();
628*cdf0e10cSrcweir 		pNewData->bDisabled=!pNewData->bIsAcceptable | bDisabled;
629*cdf0e10cSrcweir 		pNewData->aDateTime=aDateTime;
630*cdf0e10cSrcweir 		pNewData->nRow	= aRef.aStart.Row();
631*cdf0e10cSrcweir 		pNewData->nCol	= aRef.aStart.Col();
632*cdf0e10cSrcweir 		pNewData->nTable= aRef.aStart.Tab();
633*cdf0e10cSrcweir 
634*cdf0e10cSrcweir 		if(eType==SC_CAT_CONTENT)
635*cdf0e10cSrcweir 		{
636*cdf0e10cSrcweir 			if(pScChangeAction->IsDialogParent())
637*cdf0e10cSrcweir 			{
638*cdf0e10cSrcweir 				aString=aStrContentWithChild;
639*cdf0e10cSrcweir 				pNewData->nInfo=RD_SPECIAL_VISCONTENT;
640*cdf0e10cSrcweir 				pNewData->bIsRejectable=sal_False;
641*cdf0e10cSrcweir 				pNewData->bIsAcceptable=sal_False;
642*cdf0e10cSrcweir 			}
643*cdf0e10cSrcweir 			else
644*cdf0e10cSrcweir 			{
645*cdf0e10cSrcweir 				aString=*MakeTypeString(eType);
646*cdf0e10cSrcweir 				pScChangeAction->GetDescription( aDesc, pDoc, sal_True);
647*cdf0e10cSrcweir 			}
648*cdf0e10cSrcweir 		}
649*cdf0e10cSrcweir 		else
650*cdf0e10cSrcweir 		{
651*cdf0e10cSrcweir 			aString=*MakeTypeString(eType);
652*cdf0e10cSrcweir 
653*cdf0e10cSrcweir 			if(bDelMaster)
654*cdf0e10cSrcweir 			{
655*cdf0e10cSrcweir 				pScChangeAction->GetDescription( aDesc, pDoc,sal_True);
656*cdf0e10cSrcweir 				pNewData->bDisabled=sal_True;
657*cdf0e10cSrcweir 				pNewData->bIsRejectable=sal_False;
658*cdf0e10cSrcweir 			}
659*cdf0e10cSrcweir 			else
660*cdf0e10cSrcweir 				pScChangeAction->GetDescription( aDesc, pDoc,!pScChangeAction->IsMasterDelete());
661*cdf0e10cSrcweir 
662*cdf0e10cSrcweir 		}
663*cdf0e10cSrcweir 
664*cdf0e10cSrcweir 		aString+='\t';
665*cdf0e10cSrcweir 		pScChangeAction->GetRefString(aRefStr, pDoc, sal_True);
666*cdf0e10cSrcweir 		aString+=aRefStr;
667*cdf0e10cSrcweir 		aString+='\t';
668*cdf0e10cSrcweir 
669*cdf0e10cSrcweir 		if(!bIsGenerated)
670*cdf0e10cSrcweir 		{
671*cdf0e10cSrcweir 			aString+=aUser;
672*cdf0e10cSrcweir 			aString+='\t';
673*cdf0e10cSrcweir             aString+=ScGlobal::pLocaleData->getDate(aDateTime);
674*cdf0e10cSrcweir 			aString+=' ';
675*cdf0e10cSrcweir             aString+=ScGlobal::pLocaleData->getTime(aDateTime);
676*cdf0e10cSrcweir 			aString+='\t';
677*cdf0e10cSrcweir 		}
678*cdf0e10cSrcweir 		else
679*cdf0e10cSrcweir 		{
680*cdf0e10cSrcweir 			aString+='\t';
681*cdf0e10cSrcweir 			aString+='\t';
682*cdf0e10cSrcweir 		}
683*cdf0e10cSrcweir 
684*cdf0e10cSrcweir 		String aComment=pScChangeAction->GetComment();
685*cdf0e10cSrcweir 		aComment.EraseAllChars('\n');
686*cdf0e10cSrcweir 		if(aDesc.Len()>0)
687*cdf0e10cSrcweir 		{
688*cdf0e10cSrcweir 			aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " (" ));
689*cdf0e10cSrcweir 			aComment+=aDesc;
690*cdf0e10cSrcweir 			aComment+=')';
691*cdf0e10cSrcweir 		}
692*cdf0e10cSrcweir 		if(pTheView->IsValidComment(&aComment))
693*cdf0e10cSrcweir 		{
694*cdf0e10cSrcweir 			aString+=aComment;
695*cdf0e10cSrcweir 			pEntry=pTheView->InsertEntry(aString,pNewData,pParent,nPos);
696*cdf0e10cSrcweir 		}
697*cdf0e10cSrcweir 		else
698*cdf0e10cSrcweir 			delete pNewData;
699*cdf0e10cSrcweir 	}
700*cdf0e10cSrcweir 	return pEntry;
701*cdf0e10cSrcweir }
702*cdf0e10cSrcweir 
703*cdf0e10cSrcweir SvLBoxEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionContent* pScChangeAction,
704*cdf0e10cSrcweir 														  SvLBoxEntry* pParent, sal_uLong nSpecial)
705*cdf0e10cSrcweir {
706*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
707*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
708*cdf0e10cSrcweir 
709*cdf0e10cSrcweir 	if(pScChangeAction==NULL || pChanges==NULL) return NULL;
710*cdf0e10cSrcweir 
711*cdf0e10cSrcweir 	sal_Bool bIsGenerated=pChanges->IsGenerated(pScChangeAction->GetActionNumber());
712*cdf0e10cSrcweir 
713*cdf0e10cSrcweir 	sal_Bool bFlag=sal_False;
714*cdf0e10cSrcweir 
715*cdf0e10cSrcweir 	ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
716*cdf0e10cSrcweir 	String aUser=pScChangeAction->GetUser();
717*cdf0e10cSrcweir 	DateTime aDateTime=pScChangeAction->GetDateTime();
718*cdf0e10cSrcweir 
719*cdf0e10cSrcweir 	if(pTheView->IsValidEntry(&aUser,&aDateTime)||bIsGenerated)
720*cdf0e10cSrcweir 	{
721*cdf0e10cSrcweir 		if(pTPFilter->IsRange())
722*cdf0e10cSrcweir 		{
723*cdf0e10cSrcweir 			ScRange* pRangeEntry=aRangeList.First();
724*cdf0e10cSrcweir 
725*cdf0e10cSrcweir 			while(pRangeEntry!=NULL)
726*cdf0e10cSrcweir 			{
727*cdf0e10cSrcweir 				if(pRangeEntry->Intersects(aRef)) break;
728*cdf0e10cSrcweir 				pRangeEntry=aRangeList.Next();
729*cdf0e10cSrcweir 			}
730*cdf0e10cSrcweir 			//SC_CAS_VIRGIN,SC_CAS_ACCEPTED,SC_CAS_REJECTED
731*cdf0e10cSrcweir 			if(pRangeEntry!=NULL)
732*cdf0e10cSrcweir 			{
733*cdf0e10cSrcweir 				bFlag=sal_True;
734*cdf0e10cSrcweir 			}
735*cdf0e10cSrcweir 		}
736*cdf0e10cSrcweir 		else if(!bIsGenerated)
737*cdf0e10cSrcweir 			bFlag=sal_True;
738*cdf0e10cSrcweir 	}
739*cdf0e10cSrcweir 
740*cdf0e10cSrcweir 	String aRefStr;
741*cdf0e10cSrcweir 	String aString;
742*cdf0e10cSrcweir 	String a2String;
743*cdf0e10cSrcweir 	String aDesc;
744*cdf0e10cSrcweir 
745*cdf0e10cSrcweir 	if(nSpecial==RD_SPECIAL_CONTENT)
746*cdf0e10cSrcweir 	{
747*cdf0e10cSrcweir 		pScChangeAction->GetOldString(a2String);
748*cdf0e10cSrcweir 		if(a2String.Len()==0) a2String=aStrEmpty;
749*cdf0e10cSrcweir 
750*cdf0e10cSrcweir 		//aString+="\'";
751*cdf0e10cSrcweir 		aString+=a2String;
752*cdf0e10cSrcweir 		//aString+="\'";
753*cdf0e10cSrcweir 
754*cdf0e10cSrcweir 		aDesc=aStrChildOrgContent;
755*cdf0e10cSrcweir 		aDesc.AppendAscii(RTL_CONSTASCII_STRINGPARAM( ": " ));
756*cdf0e10cSrcweir 	}
757*cdf0e10cSrcweir 	else
758*cdf0e10cSrcweir 	{
759*cdf0e10cSrcweir 		pScChangeAction->GetNewString(a2String);
760*cdf0e10cSrcweir 		if(a2String.Len()==0)
761*cdf0e10cSrcweir 		{
762*cdf0e10cSrcweir 			a2String=aStrEmpty;
763*cdf0e10cSrcweir 			aString+=a2String;
764*cdf0e10cSrcweir 		}
765*cdf0e10cSrcweir 		else
766*cdf0e10cSrcweir 		{
767*cdf0e10cSrcweir 			aString+='\'';
768*cdf0e10cSrcweir 			aString+=a2String;
769*cdf0e10cSrcweir 			aString+='\'';
770*cdf0e10cSrcweir 			a2String=aString;
771*cdf0e10cSrcweir 		}
772*cdf0e10cSrcweir 		aDesc=aStrChildContent;
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir 	}
775*cdf0e10cSrcweir 
776*cdf0e10cSrcweir 	aDesc+=a2String;
777*cdf0e10cSrcweir 	aString+='\t';
778*cdf0e10cSrcweir 	pScChangeAction->GetRefString(aRefStr, pDoc, sal_True);
779*cdf0e10cSrcweir 	aString+=aRefStr;
780*cdf0e10cSrcweir 	aString+='\t';
781*cdf0e10cSrcweir 
782*cdf0e10cSrcweir 	if(!bIsGenerated)
783*cdf0e10cSrcweir 	{
784*cdf0e10cSrcweir 		aString+=aUser;
785*cdf0e10cSrcweir 		aString+='\t';
786*cdf0e10cSrcweir 
787*cdf0e10cSrcweir         aString+=ScGlobal::pLocaleData->getDate(aDateTime);
788*cdf0e10cSrcweir 		aString+=' ';
789*cdf0e10cSrcweir         aString+=ScGlobal::pLocaleData->getTime(aDateTime);
790*cdf0e10cSrcweir 		aString+='\t';
791*cdf0e10cSrcweir 	}
792*cdf0e10cSrcweir 	else
793*cdf0e10cSrcweir 	{
794*cdf0e10cSrcweir 		aString+='\t';
795*cdf0e10cSrcweir 		aString+='\t';
796*cdf0e10cSrcweir 	}
797*cdf0e10cSrcweir 	String aComment=pScChangeAction->GetComment();
798*cdf0e10cSrcweir 	aComment.EraseAllChars('\n');
799*cdf0e10cSrcweir 
800*cdf0e10cSrcweir 	if(aDesc.Len()>0)
801*cdf0e10cSrcweir 	{
802*cdf0e10cSrcweir 		aComment.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " (" ));
803*cdf0e10cSrcweir 		aComment+=aDesc;
804*cdf0e10cSrcweir 		aComment+=')';
805*cdf0e10cSrcweir 	}
806*cdf0e10cSrcweir 
807*cdf0e10cSrcweir 	aString+=aComment;
808*cdf0e10cSrcweir 
809*cdf0e10cSrcweir 	ScRedlinData* pNewData=new ScRedlinData;
810*cdf0e10cSrcweir 	pNewData->nInfo=nSpecial;
811*cdf0e10cSrcweir 	pNewData->pData=(void *)pScChangeAction;
812*cdf0e10cSrcweir 	pNewData->nActionNo=pScChangeAction->GetActionNumber();
813*cdf0e10cSrcweir 	pNewData->bIsAcceptable=pScChangeAction->IsClickable();
814*cdf0e10cSrcweir 	pNewData->bIsRejectable=sal_False;
815*cdf0e10cSrcweir 	pNewData->bDisabled=!pNewData->bIsAcceptable;
816*cdf0e10cSrcweir 	pNewData->aDateTime=aDateTime;
817*cdf0e10cSrcweir 	pNewData->nRow	= aRef.aStart.Row();
818*cdf0e10cSrcweir 	pNewData->nCol	= aRef.aStart.Col();
819*cdf0e10cSrcweir 	pNewData->nTable= aRef.aStart.Tab();
820*cdf0e10cSrcweir 
821*cdf0e10cSrcweir 	if(pTheView->IsValidComment(&aComment) && bFlag)
822*cdf0e10cSrcweir 	{
823*cdf0e10cSrcweir 		bHasFilterEntry=sal_True;
824*cdf0e10cSrcweir 		pEntry=pTheView->InsertEntry(aString,pNewData,pParent);
825*cdf0e10cSrcweir 	}
826*cdf0e10cSrcweir 	else
827*cdf0e10cSrcweir 		pEntry=pTheView->InsertEntry(aString,pNewData,Color(COL_LIGHTBLUE),pParent);
828*cdf0e10cSrcweir 	return pEntry;
829*cdf0e10cSrcweir }
830*cdf0e10cSrcweir 
831*cdf0e10cSrcweir long ScAcceptChgDlg::PreNotify( NotifyEvent& rNEvt )
832*cdf0e10cSrcweir {
833*cdf0e10cSrcweir 	if(rNEvt.GetType()==EVENT_GETFOCUS && bNeedsUpdate)
834*cdf0e10cSrcweir 	{
835*cdf0e10cSrcweir 		ClearView();
836*cdf0e10cSrcweir 		UpdateView();
837*cdf0e10cSrcweir 		bNoSelection=sal_False;
838*cdf0e10cSrcweir 	}
839*cdf0e10cSrcweir 
840*cdf0e10cSrcweir 	return SfxModelessDialog::PreNotify(rNEvt);
841*cdf0e10cSrcweir }
842*cdf0e10cSrcweir 
843*cdf0e10cSrcweir 
844*cdf0e10cSrcweir void ScAcceptChgDlg::UpdateView()
845*cdf0e10cSrcweir {
846*cdf0e10cSrcweir 	bNeedsUpdate=sal_False;
847*cdf0e10cSrcweir 	DateTime aDateTime;
848*cdf0e10cSrcweir 	SvLBoxEntry* pParent=NULL;
849*cdf0e10cSrcweir 	ScChangeTrack* pChanges=NULL;
850*cdf0e10cSrcweir 	const ScChangeAction* pScChangeAction=NULL;
851*cdf0e10cSrcweir 	bAcceptEnableFlag=sal_True;
852*cdf0e10cSrcweir 	bRejectEnableFlag=sal_True;
853*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
854*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_False);
855*cdf0e10cSrcweir 	sal_Bool bFilterFlag=pTPFilter->IsDate()||pTPFilter->IsRange()||
856*cdf0e10cSrcweir 					 pTPFilter->IsAuthor()||pTPFilter->IsComment();
857*cdf0e10cSrcweir 
858*cdf0e10cSrcweir 	bUseColor=bFilterFlag;
859*cdf0e10cSrcweir 
860*cdf0e10cSrcweir 	if(pDoc!=NULL)
861*cdf0e10cSrcweir 	{
862*cdf0e10cSrcweir 		pChanges=pDoc->GetChangeTrack();
863*cdf0e10cSrcweir 		if(pChanges!=NULL)
864*cdf0e10cSrcweir 		{
865*cdf0e10cSrcweir 			pScChangeAction=pChanges->GetFirst();
866*cdf0e10cSrcweir 		}
867*cdf0e10cSrcweir 	}
868*cdf0e10cSrcweir 	ScChangeActionTable ActionTable;
869*cdf0e10cSrcweir 	sal_Bool bTheFlag=sal_False;
870*cdf0e10cSrcweir 
871*cdf0e10cSrcweir 	while(pScChangeAction!=NULL)
872*cdf0e10cSrcweir 	{
873*cdf0e10cSrcweir 		bHasFilterEntry=sal_False;
874*cdf0e10cSrcweir 		switch(pScChangeAction->GetState())
875*cdf0e10cSrcweir 		{
876*cdf0e10cSrcweir 			case SC_CAS_VIRGIN:
877*cdf0e10cSrcweir 
878*cdf0e10cSrcweir 				if(pScChangeAction->IsDialogRoot())
879*cdf0e10cSrcweir 				{
880*cdf0e10cSrcweir 					if(pScChangeAction->IsDialogParent())
881*cdf0e10cSrcweir 						pParent=InsertChangeAction(pScChangeAction,SC_CAS_VIRGIN);
882*cdf0e10cSrcweir 					else
883*cdf0e10cSrcweir 						pParent=InsertFilteredAction(pScChangeAction,SC_CAS_VIRGIN);
884*cdf0e10cSrcweir 				}
885*cdf0e10cSrcweir 				else
886*cdf0e10cSrcweir 					pParent=NULL;
887*cdf0e10cSrcweir 
888*cdf0e10cSrcweir 				bTheFlag=sal_True;
889*cdf0e10cSrcweir 				break;
890*cdf0e10cSrcweir 
891*cdf0e10cSrcweir 			case SC_CAS_ACCEPTED:
892*cdf0e10cSrcweir 				pParent=NULL;
893*cdf0e10cSrcweir 				nAcceptCount++;
894*cdf0e10cSrcweir 				break;
895*cdf0e10cSrcweir 
896*cdf0e10cSrcweir 			case SC_CAS_REJECTED:
897*cdf0e10cSrcweir 				pParent=NULL;
898*cdf0e10cSrcweir 				nRejectCount++;
899*cdf0e10cSrcweir 				break;
900*cdf0e10cSrcweir 		}
901*cdf0e10cSrcweir 
902*cdf0e10cSrcweir 		if(pParent!=NULL && pScChangeAction->IsDialogParent())
903*cdf0e10cSrcweir 		{
904*cdf0e10cSrcweir 			if(!bFilterFlag)
905*cdf0e10cSrcweir 			{
906*cdf0e10cSrcweir 				pParent->EnableChildsOnDemand(sal_True);
907*cdf0e10cSrcweir 			}
908*cdf0e10cSrcweir 			else
909*cdf0e10cSrcweir 			{
910*cdf0e10cSrcweir 				sal_Bool bTestFlag=bHasFilterEntry;
911*cdf0e10cSrcweir 				bHasFilterEntry=sal_False;
912*cdf0e10cSrcweir 				if(Expand(pChanges,pScChangeAction,pParent,!bTestFlag)&&!bTestFlag)
913*cdf0e10cSrcweir                     pTheView->RemoveEntry(pParent);
914*cdf0e10cSrcweir 			}
915*cdf0e10cSrcweir 		}
916*cdf0e10cSrcweir 
917*cdf0e10cSrcweir 		pScChangeAction=pScChangeAction->GetNext();
918*cdf0e10cSrcweir 	}
919*cdf0e10cSrcweir 
920*cdf0e10cSrcweir     if( bTheFlag && (!pDoc->IsDocEditable() || pChanges->IsProtected()) )
921*cdf0e10cSrcweir 		bTheFlag=sal_False;
922*cdf0e10cSrcweir 
923*cdf0e10cSrcweir 	pTPView->EnableAccept(bTheFlag);
924*cdf0e10cSrcweir 	pTPView->EnableAcceptAll(bTheFlag);
925*cdf0e10cSrcweir 	pTPView->EnableReject(bTheFlag);
926*cdf0e10cSrcweir 	pTPView->EnableRejectAll(bTheFlag);
927*cdf0e10cSrcweir 
928*cdf0e10cSrcweir 	if(nAcceptCount>0)
929*cdf0e10cSrcweir 	{
930*cdf0e10cSrcweir 		pParent=pTheView->InsertEntry(
931*cdf0e10cSrcweir             aStrAllAccepted, static_cast< RedlinData * >(NULL),
932*cdf0e10cSrcweir             static_cast< SvLBoxEntry * >(NULL));
933*cdf0e10cSrcweir 		pParent->EnableChildsOnDemand(sal_True);
934*cdf0e10cSrcweir 	}
935*cdf0e10cSrcweir 	if(nRejectCount>0)
936*cdf0e10cSrcweir 	{
937*cdf0e10cSrcweir 		pParent=pTheView->InsertEntry(
938*cdf0e10cSrcweir             aStrAllRejected, static_cast< RedlinData * >(NULL),
939*cdf0e10cSrcweir             static_cast< SvLBoxEntry * >(NULL));
940*cdf0e10cSrcweir 		pParent->EnableChildsOnDemand(sal_True);
941*cdf0e10cSrcweir 	}
942*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_True);
943*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_ARROW));
944*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=pTheView->First();
945*cdf0e10cSrcweir 	if(pEntry!=NULL)
946*cdf0e10cSrcweir 	{
947*cdf0e10cSrcweir 		pTheView->Select(pEntry);
948*cdf0e10cSrcweir 	}
949*cdf0e10cSrcweir }
950*cdf0e10cSrcweir 
951*cdf0e10cSrcweir //----------------------------------------------------------------------------
952*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::Close()
953*cdf0e10cSrcweir {
954*cdf0e10cSrcweir 	return SfxModelessDialog::Close();
955*cdf0e10cSrcweir }
956*cdf0e10cSrcweir 
957*cdf0e10cSrcweir void ScAcceptChgDlg::Resize()
958*cdf0e10cSrcweir {
959*cdf0e10cSrcweir 	SfxModelessDialog::Resize();
960*cdf0e10cSrcweir     Size aOutSize=GetOutputSizePixel();
961*cdf0e10cSrcweir     aAcceptChgCtr.SetSizePixel(aOutSize);
962*cdf0e10cSrcweir }
963*cdf0e10cSrcweir 
964*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, MinSizeHandle, SvxAcceptChgCtr*, pCtr )
965*cdf0e10cSrcweir {
966*cdf0e10cSrcweir 	if(pCtr==&aAcceptChgCtr)
967*cdf0e10cSrcweir 	{
968*cdf0e10cSrcweir 		if(!IsRollUp())
969*cdf0e10cSrcweir 			SetOutputSizePixel(MinSize);
970*cdf0e10cSrcweir 	}
971*cdf0e10cSrcweir 	return 0;
972*cdf0e10cSrcweir }
973*cdf0e10cSrcweir 
974*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, RefHandle, SvxTPFilter*, EMPTYARG )
975*cdf0e10cSrcweir {
976*cdf0e10cSrcweir 	sal_uInt16 nId  =ScSimpleRefDlgWrapper::GetChildWindowId();
977*cdf0e10cSrcweir 
978*cdf0e10cSrcweir 	ScSimpleRefDlgWrapper::SetDefaultPosSize(GetPosPixel(),GetSizePixel(),sal_True);
979*cdf0e10cSrcweir 
980*cdf0e10cSrcweir 	SC_MOD()->SetRefDialog( nId, sal_True );
981*cdf0e10cSrcweir 
982*cdf0e10cSrcweir 	SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
983*cdf0e10cSrcweir 	ScSimpleRefDlgWrapper* pWnd =(ScSimpleRefDlgWrapper*)pViewFrm->GetChildWindow( nId );
984*cdf0e10cSrcweir 
985*cdf0e10cSrcweir 	if(pWnd!=NULL)
986*cdf0e10cSrcweir 	{
987*cdf0e10cSrcweir //		bSimpleRefDlgStarted=sal_True;
988*cdf0e10cSrcweir 		sal_uInt16 nAcceptId=ScAcceptChgDlgWrapper::GetChildWindowId();
989*cdf0e10cSrcweir 		pViewFrm->ShowChildWindow(nAcceptId,sal_False);
990*cdf0e10cSrcweir 		pWnd->SetCloseHdl(LINK( this, ScAcceptChgDlg,RefInfoHandle));
991*cdf0e10cSrcweir 		pWnd->SetRefString(pTPFilter->GetRange());
992*cdf0e10cSrcweir 		pWnd->SetAutoReOpen(sal_False);
993*cdf0e10cSrcweir 		Window* pWin=pWnd->GetWindow();
994*cdf0e10cSrcweir 		pWin->SetPosSizePixel(GetPosPixel(),GetSizePixel());
995*cdf0e10cSrcweir 		Hide();
996*cdf0e10cSrcweir 		pWin->SetText(GetText());
997*cdf0e10cSrcweir 		pWnd->StartRefInput();
998*cdf0e10cSrcweir 	}
999*cdf0e10cSrcweir 	return 0;
1000*cdf0e10cSrcweir }
1001*cdf0e10cSrcweir 
1002*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, RefInfoHandle, String*, pResult)
1003*cdf0e10cSrcweir {
1004*cdf0e10cSrcweir 	sal_uInt16 nId;
1005*cdf0e10cSrcweir 
1006*cdf0e10cSrcweir //	bSimpleRefDlgStarted=sal_False;
1007*cdf0e10cSrcweir 	ScSimpleRefDlgWrapper::SetAutoReOpen(sal_True);
1008*cdf0e10cSrcweir 
1009*cdf0e10cSrcweir 	SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
1010*cdf0e10cSrcweir 	if(pResult!=NULL)
1011*cdf0e10cSrcweir 	{
1012*cdf0e10cSrcweir 		pTPFilter->SetRange(*pResult);
1013*cdf0e10cSrcweir 		FilterHandle(pTPFilter);
1014*cdf0e10cSrcweir 
1015*cdf0e10cSrcweir 		nId = ScSimpleRefDlgWrapper::GetChildWindowId();
1016*cdf0e10cSrcweir 		ScSimpleRefDlgWrapper* pWnd = (ScSimpleRefDlgWrapper*)pViewFrm->GetChildWindow( nId );
1017*cdf0e10cSrcweir 
1018*cdf0e10cSrcweir 		if(pWnd!=NULL)
1019*cdf0e10cSrcweir 		{
1020*cdf0e10cSrcweir 			Window* pWin=pWnd->GetWindow();
1021*cdf0e10cSrcweir             Size aWinSize=pWin->GetSizePixel();
1022*cdf0e10cSrcweir             aWinSize.Width()=GetSizePixel().Width();
1023*cdf0e10cSrcweir             SetPosSizePixel(pWin->GetPosPixel(),aWinSize);
1024*cdf0e10cSrcweir 			Invalidate();
1025*cdf0e10cSrcweir 		}
1026*cdf0e10cSrcweir 		nId = ScAcceptChgDlgWrapper::GetChildWindowId();
1027*cdf0e10cSrcweir 		pViewFrm->ShowChildWindow( nId, sal_True );
1028*cdf0e10cSrcweir 	}
1029*cdf0e10cSrcweir 	else
1030*cdf0e10cSrcweir 	{
1031*cdf0e10cSrcweir 		nId = ScAcceptChgDlgWrapper::GetChildWindowId();
1032*cdf0e10cSrcweir 		pViewFrm->SetChildWindow( nId, sal_False );
1033*cdf0e10cSrcweir 	}
1034*cdf0e10cSrcweir 	return 0;
1035*cdf0e10cSrcweir }
1036*cdf0e10cSrcweir 
1037*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, FilterHandle, SvxTPFilter*, pRef )
1038*cdf0e10cSrcweir {
1039*cdf0e10cSrcweir 	if(pRef!=NULL)
1040*cdf0e10cSrcweir 	{
1041*cdf0e10cSrcweir 		ClearView();
1042*cdf0e10cSrcweir 		aRangeList.Clear();
1043*cdf0e10cSrcweir 		aRangeList.Parse(pTPFilter->GetRange(),pDoc);
1044*cdf0e10cSrcweir 		UpdateView();
1045*cdf0e10cSrcweir 	}
1046*cdf0e10cSrcweir 	return 0;
1047*cdf0e10cSrcweir }
1048*cdf0e10cSrcweir 
1049*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, RejectHandle, SvxTPView*, pRef )
1050*cdf0e10cSrcweir {
1051*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
1052*cdf0e10cSrcweir 
1053*cdf0e10cSrcweir 	bIgnoreMsg=sal_True;
1054*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1055*cdf0e10cSrcweir 
1056*cdf0e10cSrcweir 	if(pRef!=NULL)
1057*cdf0e10cSrcweir 	{
1058*cdf0e10cSrcweir 		SvLBoxEntry* pEntry=pTheView->FirstSelected();
1059*cdf0e10cSrcweir 		while(pEntry!=NULL)
1060*cdf0e10cSrcweir 		{
1061*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1062*cdf0e10cSrcweir 			if(pEntryData!=NULL)
1063*cdf0e10cSrcweir 			{
1064*cdf0e10cSrcweir 				ScChangeAction* pScChangeAction=
1065*cdf0e10cSrcweir 						(ScChangeAction*) pEntryData->pData;
1066*cdf0e10cSrcweir 
1067*cdf0e10cSrcweir 				if(pScChangeAction->GetType()==SC_CAT_INSERT_TABS)
1068*cdf0e10cSrcweir 				{
1069*cdf0e10cSrcweir 					pViewData->SetTabNo(0);
1070*cdf0e10cSrcweir 				}
1071*cdf0e10cSrcweir 				pChanges->Reject(pScChangeAction);
1072*cdf0e10cSrcweir 			}
1073*cdf0e10cSrcweir 			pEntry = pTheView->NextSelected(pEntry);
1074*cdf0e10cSrcweir 		}
1075*cdf0e10cSrcweir 		ScDocShell* pDocSh=pViewData->GetDocShell();
1076*cdf0e10cSrcweir 		pDocSh->PostPaintExtras();
1077*cdf0e10cSrcweir 		pDocSh->PostPaintGridAll();
1078*cdf0e10cSrcweir 		pDocSh->GetUndoManager()->Clear();
1079*cdf0e10cSrcweir 		pDocSh->SetDocumentModified();
1080*cdf0e10cSrcweir 		ClearView();
1081*cdf0e10cSrcweir 		UpdateView();
1082*cdf0e10cSrcweir 	}
1083*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_ARROW));
1084*cdf0e10cSrcweir 
1085*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
1086*cdf0e10cSrcweir 	return 0;
1087*cdf0e10cSrcweir }
1088*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, AcceptHandle, SvxTPView*, pRef )
1089*cdf0e10cSrcweir {
1090*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
1091*cdf0e10cSrcweir 
1092*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1093*cdf0e10cSrcweir 	bIgnoreMsg=sal_True;
1094*cdf0e10cSrcweir 	if(pRef!=NULL)
1095*cdf0e10cSrcweir 	{
1096*cdf0e10cSrcweir 		SvLBoxEntry* pEntry=pTheView->FirstSelected();
1097*cdf0e10cSrcweir 		while(pEntry!=NULL)
1098*cdf0e10cSrcweir 		{
1099*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1100*cdf0e10cSrcweir 			if(pEntryData!=NULL)
1101*cdf0e10cSrcweir 			{
1102*cdf0e10cSrcweir 				ScChangeAction* pScChangeAction=
1103*cdf0e10cSrcweir 						(ScChangeAction*) pEntryData->pData;
1104*cdf0e10cSrcweir 				if(pScChangeAction->GetType()==SC_CAT_CONTENT)
1105*cdf0e10cSrcweir 				{
1106*cdf0e10cSrcweir 					if(pEntryData->nInfo==RD_SPECIAL_CONTENT)
1107*cdf0e10cSrcweir 					{
1108*cdf0e10cSrcweir 						pChanges->SelectContent(pScChangeAction,sal_True);
1109*cdf0e10cSrcweir 					}
1110*cdf0e10cSrcweir 					else
1111*cdf0e10cSrcweir 					{
1112*cdf0e10cSrcweir 						pChanges->SelectContent(pScChangeAction);
1113*cdf0e10cSrcweir 					}
1114*cdf0e10cSrcweir 				}
1115*cdf0e10cSrcweir 				else
1116*cdf0e10cSrcweir 					pChanges->Accept(pScChangeAction);
1117*cdf0e10cSrcweir 			}
1118*cdf0e10cSrcweir 			pEntry = pTheView->NextSelected(pEntry);
1119*cdf0e10cSrcweir 		}
1120*cdf0e10cSrcweir 		ScDocShell* pDocSh=pViewData->GetDocShell();
1121*cdf0e10cSrcweir 		pDocSh->PostPaintExtras();
1122*cdf0e10cSrcweir 		pDocSh->PostPaintGridAll();
1123*cdf0e10cSrcweir 		pDocSh->SetDocumentModified();
1124*cdf0e10cSrcweir 		ClearView();
1125*cdf0e10cSrcweir 		UpdateView();
1126*cdf0e10cSrcweir 	}
1127*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
1128*cdf0e10cSrcweir 
1129*cdf0e10cSrcweir 	return 0;
1130*cdf0e10cSrcweir }
1131*cdf0e10cSrcweir 
1132*cdf0e10cSrcweir void ScAcceptChgDlg::RejectFiltered()
1133*cdf0e10cSrcweir {
1134*cdf0e10cSrcweir 	if(pDoc==NULL) return;
1135*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1136*cdf0e10cSrcweir 	const ScChangeAction* pScChangeAction=NULL;
1137*cdf0e10cSrcweir 
1138*cdf0e10cSrcweir 	if(pChanges!=NULL)
1139*cdf0e10cSrcweir 	{
1140*cdf0e10cSrcweir 		pScChangeAction=pChanges->GetLast();
1141*cdf0e10cSrcweir 	}
1142*cdf0e10cSrcweir 
1143*cdf0e10cSrcweir 	while(pScChangeAction!=NULL)
1144*cdf0e10cSrcweir 	{
1145*cdf0e10cSrcweir 		if(pScChangeAction->IsDialogRoot())
1146*cdf0e10cSrcweir 		{
1147*cdf0e10cSrcweir 			if(IsValidAction(pScChangeAction))
1148*cdf0e10cSrcweir 			{
1149*cdf0e10cSrcweir 				pChanges->Reject((ScChangeAction*)pScChangeAction);
1150*cdf0e10cSrcweir 			}
1151*cdf0e10cSrcweir 		}
1152*cdf0e10cSrcweir 		pScChangeAction=pScChangeAction->GetPrev();
1153*cdf0e10cSrcweir 	}
1154*cdf0e10cSrcweir }
1155*cdf0e10cSrcweir void ScAcceptChgDlg::AcceptFiltered()
1156*cdf0e10cSrcweir {
1157*cdf0e10cSrcweir 	if(pDoc==NULL) return;
1158*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1159*cdf0e10cSrcweir 	const ScChangeAction* pScChangeAction=NULL;
1160*cdf0e10cSrcweir 
1161*cdf0e10cSrcweir 	if(pChanges!=NULL)
1162*cdf0e10cSrcweir 	{
1163*cdf0e10cSrcweir 		pScChangeAction=pChanges->GetLast();
1164*cdf0e10cSrcweir 	}
1165*cdf0e10cSrcweir 
1166*cdf0e10cSrcweir 	while(pScChangeAction!=NULL)
1167*cdf0e10cSrcweir 	{
1168*cdf0e10cSrcweir 		if(pScChangeAction->IsDialogRoot())
1169*cdf0e10cSrcweir 		{
1170*cdf0e10cSrcweir 			if(IsValidAction(pScChangeAction))
1171*cdf0e10cSrcweir 			{
1172*cdf0e10cSrcweir 				pChanges->Accept((ScChangeAction*)pScChangeAction);
1173*cdf0e10cSrcweir 			}
1174*cdf0e10cSrcweir 		}
1175*cdf0e10cSrcweir 		pScChangeAction=pScChangeAction->GetPrev();
1176*cdf0e10cSrcweir 	}
1177*cdf0e10cSrcweir }
1178*cdf0e10cSrcweir 
1179*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, RejectAllHandle, SvxTPView*, EMPTYARG )
1180*cdf0e10cSrcweir {
1181*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
1182*cdf0e10cSrcweir 	bIgnoreMsg=sal_True;
1183*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1184*cdf0e10cSrcweir 	if(pChanges!=NULL)
1185*cdf0e10cSrcweir 	{
1186*cdf0e10cSrcweir 		if(pTPFilter->IsDate()||pTPFilter->IsAuthor()||pTPFilter->IsRange()||pTPFilter->IsComment())
1187*cdf0e10cSrcweir 		{
1188*cdf0e10cSrcweir 			RejectFiltered();
1189*cdf0e10cSrcweir 		}
1190*cdf0e10cSrcweir 		else
1191*cdf0e10cSrcweir 		{
1192*cdf0e10cSrcweir 			pChanges->RejectAll();
1193*cdf0e10cSrcweir 		}
1194*cdf0e10cSrcweir 		pViewData->SetTabNo(0);
1195*cdf0e10cSrcweir 
1196*cdf0e10cSrcweir 		ScDocShell* pDocSh=pViewData->GetDocShell();
1197*cdf0e10cSrcweir 		pDocSh->PostPaintExtras();
1198*cdf0e10cSrcweir 		pDocSh->PostPaintGridAll();
1199*cdf0e10cSrcweir 		pDocSh->GetUndoManager()->Clear();
1200*cdf0e10cSrcweir 		pDocSh->SetDocumentModified();
1201*cdf0e10cSrcweir 		ClearView();
1202*cdf0e10cSrcweir 		UpdateView();
1203*cdf0e10cSrcweir 	}
1204*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_ARROW));
1205*cdf0e10cSrcweir 
1206*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
1207*cdf0e10cSrcweir 
1208*cdf0e10cSrcweir 	return 0;
1209*cdf0e10cSrcweir }
1210*cdf0e10cSrcweir 
1211*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, AcceptAllHandle, SvxTPView*, EMPTYARG )
1212*cdf0e10cSrcweir {
1213*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
1214*cdf0e10cSrcweir 
1215*cdf0e10cSrcweir 	bIgnoreMsg=sal_True;
1216*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1217*cdf0e10cSrcweir 	if(pChanges!=NULL)
1218*cdf0e10cSrcweir 	{
1219*cdf0e10cSrcweir 		if(pTPFilter->IsDate()||pTPFilter->IsAuthor()||pTPFilter->IsRange()||pTPFilter->IsComment())
1220*cdf0e10cSrcweir 		{
1221*cdf0e10cSrcweir 			AcceptFiltered();
1222*cdf0e10cSrcweir 		}
1223*cdf0e10cSrcweir 		else
1224*cdf0e10cSrcweir 		{
1225*cdf0e10cSrcweir 			pChanges->AcceptAll();
1226*cdf0e10cSrcweir 		}
1227*cdf0e10cSrcweir 		ScDocShell* pDocSh=pViewData->GetDocShell();
1228*cdf0e10cSrcweir 		pDocSh->PostPaintExtras();
1229*cdf0e10cSrcweir 		pDocSh->PostPaintGridAll();
1230*cdf0e10cSrcweir 		pDocSh->SetDocumentModified();
1231*cdf0e10cSrcweir 		ClearView();
1232*cdf0e10cSrcweir 		UpdateView();
1233*cdf0e10cSrcweir 	}
1234*cdf0e10cSrcweir 	bIgnoreMsg=sal_False;
1235*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_ARROW));
1236*cdf0e10cSrcweir 
1237*cdf0e10cSrcweir 	return 0;
1238*cdf0e10cSrcweir }
1239*cdf0e10cSrcweir 
1240*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, SelectHandle, SvxRedlinTable*, EMPTYARG )
1241*cdf0e10cSrcweir {
1242*cdf0e10cSrcweir 	if(!bNoSelection)
1243*cdf0e10cSrcweir 	{
1244*cdf0e10cSrcweir 		aSelectionTimer.Start();
1245*cdf0e10cSrcweir 	}
1246*cdf0e10cSrcweir 	bNoSelection=sal_False;
1247*cdf0e10cSrcweir 	return 0;
1248*cdf0e10cSrcweir }
1249*cdf0e10cSrcweir 
1250*cdf0e10cSrcweir void ScAcceptChgDlg::GetDependents(  const ScChangeAction* pScChangeAction,
1251*cdf0e10cSrcweir 									ScChangeActionTable& aActionTable,
1252*cdf0e10cSrcweir 									SvLBoxEntry* pEntry)
1253*cdf0e10cSrcweir {
1254*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1255*cdf0e10cSrcweir 
1256*cdf0e10cSrcweir 	SvLBoxEntry* pParent=pTheView->GetParent(pEntry);
1257*cdf0e10cSrcweir 	if(pParent!=NULL)
1258*cdf0e10cSrcweir 	{
1259*cdf0e10cSrcweir 		ScRedlinData *pParentData=(ScRedlinData *)(pParent->GetUserData());
1260*cdf0e10cSrcweir 		ScChangeAction* pParentAction=(ScChangeAction*) pParentData->pData;
1261*cdf0e10cSrcweir 		if(pParentAction!=pScChangeAction)
1262*cdf0e10cSrcweir 		{
1263*cdf0e10cSrcweir 			pChanges->GetDependents((ScChangeAction*) pScChangeAction,
1264*cdf0e10cSrcweir 						aActionTable,pScChangeAction->IsMasterDelete());
1265*cdf0e10cSrcweir 		}
1266*cdf0e10cSrcweir 		else
1267*cdf0e10cSrcweir 		{
1268*cdf0e10cSrcweir 			pChanges->GetDependents((ScChangeAction*) pScChangeAction,
1269*cdf0e10cSrcweir 						aActionTable);
1270*cdf0e10cSrcweir 		}
1271*cdf0e10cSrcweir 	}
1272*cdf0e10cSrcweir 	else
1273*cdf0e10cSrcweir 	{
1274*cdf0e10cSrcweir 		pChanges->GetDependents((ScChangeAction*) pScChangeAction,
1275*cdf0e10cSrcweir 					aActionTable,pScChangeAction->IsMasterDelete());
1276*cdf0e10cSrcweir 	}
1277*cdf0e10cSrcweir }
1278*cdf0e10cSrcweir 
1279*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::InsertContentChilds(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent)
1280*cdf0e10cSrcweir {
1281*cdf0e10cSrcweir 	sal_Bool bTheTestFlag=sal_True;
1282*cdf0e10cSrcweir 	ScRedlinData *pEntryData=(ScRedlinData *)(pParent->GetUserData());
1283*cdf0e10cSrcweir 	const ScChangeAction* pScChangeAction = (ScChangeAction*) pEntryData->pData;
1284*cdf0e10cSrcweir 	sal_Bool bParentInserted = sal_False;
1285*cdf0e10cSrcweir 	// If the parent is a MatrixOrigin then place it in the right order before
1286*cdf0e10cSrcweir 	// the MatrixReferences. Also if it is the first content change at this
1287*cdf0e10cSrcweir 	// position don't insert the first dependent MatrixReference as the special
1288*cdf0e10cSrcweir 	// content (original value) but insert the predecessor of the MatrixOrigin
1289*cdf0e10cSrcweir 	// itself instead.
1290*cdf0e10cSrcweir 	if ( pScChangeAction->GetType() == SC_CAT_CONTENT &&
1291*cdf0e10cSrcweir 			((const ScChangeActionContent*)pScChangeAction)->IsMatrixOrigin() )
1292*cdf0e10cSrcweir 	{
1293*cdf0e10cSrcweir 		pActionTable->Insert( pScChangeAction->GetActionNumber(),
1294*cdf0e10cSrcweir 			(ScChangeAction*) pScChangeAction );
1295*cdf0e10cSrcweir 		bParentInserted = sal_True;
1296*cdf0e10cSrcweir 	}
1297*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
1298*cdf0e10cSrcweir 
1299*cdf0e10cSrcweir 	const ScChangeActionContent* pCChild=(const ScChangeActionContent*)pActionTable->First();
1300*cdf0e10cSrcweir 	while(pCChild!=NULL)
1301*cdf0e10cSrcweir 	{
1302*cdf0e10cSrcweir 		if( pCChild->GetState()==SC_CAS_VIRGIN )
1303*cdf0e10cSrcweir 			break;
1304*cdf0e10cSrcweir 		pCChild=(const ScChangeActionContent*)pActionTable->Next();
1305*cdf0e10cSrcweir 	}
1306*cdf0e10cSrcweir 
1307*cdf0e10cSrcweir 	if(pCChild==NULL) return sal_True;
1308*cdf0e10cSrcweir 
1309*cdf0e10cSrcweir 	SvLBoxEntry* pOriginal=InsertChangeActionContent(pCChild,pParent,RD_SPECIAL_CONTENT);
1310*cdf0e10cSrcweir 	if(pOriginal!=NULL)
1311*cdf0e10cSrcweir 	{
1312*cdf0e10cSrcweir 		bTheTestFlag=sal_False;
1313*cdf0e10cSrcweir 		ScRedlinData *pParentData=(ScRedlinData *)(pOriginal->GetUserData());
1314*cdf0e10cSrcweir 		pParentData->pData=(void *)pScChangeAction;
1315*cdf0e10cSrcweir 		pParentData->nActionNo=pScChangeAction->GetActionNumber();
1316*cdf0e10cSrcweir 		pParentData->bIsAcceptable=pScChangeAction->IsRejectable();	// select old value
1317*cdf0e10cSrcweir 		pParentData->bIsRejectable=sal_False;
1318*cdf0e10cSrcweir 		pParentData->bDisabled=sal_False;
1319*cdf0e10cSrcweir 	}
1320*cdf0e10cSrcweir 	while(pCChild!=NULL)
1321*cdf0e10cSrcweir 	{
1322*cdf0e10cSrcweir 		if(pCChild->GetState()==SC_CAS_VIRGIN)
1323*cdf0e10cSrcweir 		{
1324*cdf0e10cSrcweir 			pEntry=InsertChangeActionContent(pCChild,pParent,RD_SPECIAL_NONE);
1325*cdf0e10cSrcweir 
1326*cdf0e10cSrcweir 			if(pEntry!=NULL)
1327*cdf0e10cSrcweir 				bTheTestFlag=sal_False;
1328*cdf0e10cSrcweir 		}
1329*cdf0e10cSrcweir 		pCChild=(const ScChangeActionContent*)pActionTable->Next();
1330*cdf0e10cSrcweir 	}
1331*cdf0e10cSrcweir 
1332*cdf0e10cSrcweir 	if ( !bParentInserted )
1333*cdf0e10cSrcweir 	{
1334*cdf0e10cSrcweir 		pEntry=InsertChangeActionContent((const ScChangeActionContent*)
1335*cdf0e10cSrcweir 								pScChangeAction,pParent,RD_SPECIAL_NONE);
1336*cdf0e10cSrcweir 
1337*cdf0e10cSrcweir 		if(pEntry!=NULL)
1338*cdf0e10cSrcweir 		{
1339*cdf0e10cSrcweir 			bTheTestFlag=sal_False;
1340*cdf0e10cSrcweir 			ScRedlinData *pParentData=(ScRedlinData *)(pEntry->GetUserData());
1341*cdf0e10cSrcweir 			pParentData->pData=(void *)pScChangeAction;
1342*cdf0e10cSrcweir 			pParentData->nActionNo=pScChangeAction->GetActionNumber();
1343*cdf0e10cSrcweir 			pParentData->bIsAcceptable=pScChangeAction->IsClickable();
1344*cdf0e10cSrcweir 			pParentData->bIsRejectable=sal_False;
1345*cdf0e10cSrcweir 			pParentData->bDisabled=sal_False;
1346*cdf0e10cSrcweir 		}
1347*cdf0e10cSrcweir 	}
1348*cdf0e10cSrcweir 
1349*cdf0e10cSrcweir 	return bTheTestFlag;
1350*cdf0e10cSrcweir 
1351*cdf0e10cSrcweir }
1352*cdf0e10cSrcweir 
1353*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::InsertAcceptedORejected(SvLBoxEntry* pParent)
1354*cdf0e10cSrcweir {
1355*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1356*cdf0e10cSrcweir 	sal_Bool bTheTestFlag=sal_True;
1357*cdf0e10cSrcweir 
1358*cdf0e10cSrcweir 	ScChangeActionState eState = SC_CAS_VIRGIN;
1359*cdf0e10cSrcweir 	String aString=pTheView->GetEntryText( pParent);
1360*cdf0e10cSrcweir 	String a2String=aString.Copy(0,aStrAllAccepted.Len());
1361*cdf0e10cSrcweir 	if(a2String==aStrAllAccepted)
1362*cdf0e10cSrcweir 	{
1363*cdf0e10cSrcweir 		eState=SC_CAS_ACCEPTED;
1364*cdf0e10cSrcweir 	}
1365*cdf0e10cSrcweir 	else
1366*cdf0e10cSrcweir 	{
1367*cdf0e10cSrcweir 		a2String=aString.Copy(0,aStrAllRejected.Len());
1368*cdf0e10cSrcweir 		if(a2String==aStrAllRejected)
1369*cdf0e10cSrcweir 		{
1370*cdf0e10cSrcweir 			eState=SC_CAS_REJECTED;
1371*cdf0e10cSrcweir 		}
1372*cdf0e10cSrcweir 	}
1373*cdf0e10cSrcweir 
1374*cdf0e10cSrcweir 	ScChangeAction* pScChangeAction=pChanges->GetFirst();
1375*cdf0e10cSrcweir 	while(pScChangeAction!=NULL)
1376*cdf0e10cSrcweir 	{
1377*cdf0e10cSrcweir 		if(pScChangeAction->GetState()==eState &&
1378*cdf0e10cSrcweir 			InsertFilteredAction(pScChangeAction,eState,pParent)!=NULL)
1379*cdf0e10cSrcweir 			bTheTestFlag=sal_False;
1380*cdf0e10cSrcweir 		pScChangeAction=pScChangeAction->GetNext();
1381*cdf0e10cSrcweir 	}
1382*cdf0e10cSrcweir 	return bTheTestFlag;
1383*cdf0e10cSrcweir }
1384*cdf0e10cSrcweir 
1385*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::InsertChilds(ScChangeActionTable* pActionTable,SvLBoxEntry* pParent)
1386*cdf0e10cSrcweir {
1387*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1388*cdf0e10cSrcweir 	sal_Bool bTheTestFlag=sal_True;
1389*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
1390*cdf0e10cSrcweir 	const ScChangeAction* pChild=(const ScChangeAction*)pActionTable->First();
1391*cdf0e10cSrcweir 	while(pChild!=NULL)
1392*cdf0e10cSrcweir 	{
1393*cdf0e10cSrcweir 		pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,sal_False,sal_True);
1394*cdf0e10cSrcweir 
1395*cdf0e10cSrcweir 		if(pEntry!=NULL)
1396*cdf0e10cSrcweir 		{
1397*cdf0e10cSrcweir 			bTheTestFlag=sal_False;
1398*cdf0e10cSrcweir 
1399*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1400*cdf0e10cSrcweir 			pEntryData->bIsRejectable=sal_False;
1401*cdf0e10cSrcweir 			pEntryData->bIsAcceptable=sal_False;
1402*cdf0e10cSrcweir 			pEntryData->bDisabled=sal_True;
1403*cdf0e10cSrcweir 
1404*cdf0e10cSrcweir 			if(pChild->IsDialogParent())
1405*cdf0e10cSrcweir 			{
1406*cdf0e10cSrcweir 
1407*cdf0e10cSrcweir 				//pEntry->EnableChildsOnDemand(sal_True);
1408*cdf0e10cSrcweir 				Expand(pChanges,pChild,pEntry);
1409*cdf0e10cSrcweir 			}
1410*cdf0e10cSrcweir 		}
1411*cdf0e10cSrcweir 		pChild=pActionTable->Next();
1412*cdf0e10cSrcweir 	}
1413*cdf0e10cSrcweir 	return bTheTestFlag;
1414*cdf0e10cSrcweir }
1415*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::InsertDeletedChilds(const ScChangeAction* pScChangeAction,
1416*cdf0e10cSrcweir 										 ScChangeActionTable* pActionTable,SvLBoxEntry* pParent)
1417*cdf0e10cSrcweir {
1418*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1419*cdf0e10cSrcweir 	sal_Bool bTheTestFlag=sal_True;
1420*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=NULL;
1421*cdf0e10cSrcweir 	ScChangeActionTable aDelActionTable;
1422*cdf0e10cSrcweir 	const ScChangeAction* pChild=(const ScChangeAction*)pActionTable->First();
1423*cdf0e10cSrcweir 
1424*cdf0e10cSrcweir 	while(pChild!=NULL)
1425*cdf0e10cSrcweir 	{
1426*cdf0e10cSrcweir 
1427*cdf0e10cSrcweir 		if(pScChangeAction!=pChild)
1428*cdf0e10cSrcweir 			pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,sal_False,sal_True);
1429*cdf0e10cSrcweir 		else
1430*cdf0e10cSrcweir 			pEntry=InsertChangeAction(pChild,SC_CAS_VIRGIN,pParent,sal_True,sal_True);
1431*cdf0e10cSrcweir 
1432*cdf0e10cSrcweir 		if(pEntry!=NULL)
1433*cdf0e10cSrcweir 		{
1434*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1435*cdf0e10cSrcweir 			pEntryData->bIsRejectable=sal_False;
1436*cdf0e10cSrcweir 			pEntryData->bIsAcceptable=sal_False;
1437*cdf0e10cSrcweir 			pEntryData->bDisabled=sal_True;
1438*cdf0e10cSrcweir 
1439*cdf0e10cSrcweir 			bTheTestFlag=sal_False;
1440*cdf0e10cSrcweir 			if ( pChild->IsDialogParent() )
1441*cdf0e10cSrcweir 			{
1442*cdf0e10cSrcweir 				Expand(pChanges,pChild,pEntry);
1443*cdf0e10cSrcweir 				/*
1444*cdf0e10cSrcweir 				pChanges->GetDependents((ScChangeAction*) pChild,aDelActionTable);
1445*cdf0e10cSrcweir 				if(aDelActionTable.First()!=NULL)
1446*cdf0e10cSrcweir 				{
1447*cdf0e10cSrcweir 					pEntry->EnableChildsOnDemand(sal_True);
1448*cdf0e10cSrcweir 				}
1449*cdf0e10cSrcweir 				aDelActionTable.Clear();
1450*cdf0e10cSrcweir 				*/
1451*cdf0e10cSrcweir 			}
1452*cdf0e10cSrcweir 		}
1453*cdf0e10cSrcweir 		pChild=pActionTable->Next();
1454*cdf0e10cSrcweir 	}
1455*cdf0e10cSrcweir 	return bTheTestFlag;
1456*cdf0e10cSrcweir }
1457*cdf0e10cSrcweir 
1458*cdf0e10cSrcweir sal_Bool ScAcceptChgDlg::Expand(ScChangeTrack* pChanges,const ScChangeAction* pScChangeAction,
1459*cdf0e10cSrcweir 							SvLBoxEntry* pEntry,sal_Bool bFilter)
1460*cdf0e10cSrcweir {
1461*cdf0e10cSrcweir 	sal_Bool bTheTestFlag=sal_True;
1462*cdf0e10cSrcweir 
1463*cdf0e10cSrcweir 	if(pChanges!=NULL &&pEntry!=NULL &&pScChangeAction!=NULL)
1464*cdf0e10cSrcweir 	{
1465*cdf0e10cSrcweir 		ScChangeActionTable aActionTable;
1466*cdf0e10cSrcweir 
1467*cdf0e10cSrcweir 		GetDependents( pScChangeAction,aActionTable,pEntry);
1468*cdf0e10cSrcweir 
1469*cdf0e10cSrcweir 		switch(pScChangeAction->GetType())
1470*cdf0e10cSrcweir 		{
1471*cdf0e10cSrcweir 			case SC_CAT_CONTENT:
1472*cdf0e10cSrcweir 			{
1473*cdf0e10cSrcweir 				InsertContentChilds(&aActionTable,pEntry);
1474*cdf0e10cSrcweir 				bTheTestFlag=!bHasFilterEntry;
1475*cdf0e10cSrcweir 				break;
1476*cdf0e10cSrcweir 			}
1477*cdf0e10cSrcweir 			case SC_CAT_DELETE_COLS:
1478*cdf0e10cSrcweir 			case SC_CAT_DELETE_ROWS:
1479*cdf0e10cSrcweir 			case SC_CAT_DELETE_TABS:
1480*cdf0e10cSrcweir 			{
1481*cdf0e10cSrcweir 				InsertDeletedChilds(pScChangeAction,&aActionTable,pEntry);
1482*cdf0e10cSrcweir 				bTheTestFlag=!bHasFilterEntry;
1483*cdf0e10cSrcweir 				break;
1484*cdf0e10cSrcweir 			}
1485*cdf0e10cSrcweir 			default:
1486*cdf0e10cSrcweir 			{
1487*cdf0e10cSrcweir 				if(!bFilter)
1488*cdf0e10cSrcweir 					bTheTestFlag=InsertChilds(&aActionTable,pEntry);
1489*cdf0e10cSrcweir 				break;
1490*cdf0e10cSrcweir 			}
1491*cdf0e10cSrcweir 		}
1492*cdf0e10cSrcweir 		aActionTable.Clear();
1493*cdf0e10cSrcweir 	}
1494*cdf0e10cSrcweir 	return bTheTestFlag;
1495*cdf0e10cSrcweir }
1496*cdf0e10cSrcweir 
1497*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, ExpandingHandle, SvxRedlinTable*, pTable )
1498*cdf0e10cSrcweir {
1499*cdf0e10cSrcweir 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
1500*cdf0e10cSrcweir 	ScChangeAction* pScChangeAction=NULL;
1501*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_WAIT));
1502*cdf0e10cSrcweir 	if(pTable!=NULL && pChanges!=NULL)
1503*cdf0e10cSrcweir 	{
1504*cdf0e10cSrcweir 		ScChangeActionTable aActionTable;
1505*cdf0e10cSrcweir 		SvLBoxEntry* pEntry=pTheView->GetHdlEntry();
1506*cdf0e10cSrcweir 		if(pEntry!=NULL)
1507*cdf0e10cSrcweir 		{
1508*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1509*cdf0e10cSrcweir 			if(pEntryData!=NULL)
1510*cdf0e10cSrcweir 			{
1511*cdf0e10cSrcweir 				pScChangeAction=(ScChangeAction*) pEntryData->pData;
1512*cdf0e10cSrcweir 			}
1513*cdf0e10cSrcweir 
1514*cdf0e10cSrcweir 			if(pEntry->HasChildsOnDemand())
1515*cdf0e10cSrcweir 			{
1516*cdf0e10cSrcweir 				sal_Bool bTheTestFlag=sal_True;
1517*cdf0e10cSrcweir 				pEntry->EnableChildsOnDemand(sal_False);
1518*cdf0e10cSrcweir                 pTheView->RemoveEntry(pTheView->FirstChild(pEntry));
1519*cdf0e10cSrcweir 
1520*cdf0e10cSrcweir 				if(pEntryData!=NULL)
1521*cdf0e10cSrcweir 				{
1522*cdf0e10cSrcweir 					pScChangeAction=(ScChangeAction*) pEntryData->pData;
1523*cdf0e10cSrcweir 
1524*cdf0e10cSrcweir 					GetDependents( pScChangeAction,aActionTable,pEntry);
1525*cdf0e10cSrcweir 
1526*cdf0e10cSrcweir 					switch(pScChangeAction->GetType())
1527*cdf0e10cSrcweir 					{
1528*cdf0e10cSrcweir 						case SC_CAT_CONTENT:
1529*cdf0e10cSrcweir 						{
1530*cdf0e10cSrcweir 							bTheTestFlag=InsertContentChilds(&aActionTable,pEntry);
1531*cdf0e10cSrcweir 							break;
1532*cdf0e10cSrcweir 						}
1533*cdf0e10cSrcweir 						case SC_CAT_DELETE_COLS:
1534*cdf0e10cSrcweir 						case SC_CAT_DELETE_ROWS:
1535*cdf0e10cSrcweir 						case SC_CAT_DELETE_TABS:
1536*cdf0e10cSrcweir 						{
1537*cdf0e10cSrcweir 							bTheTestFlag=InsertDeletedChilds(pScChangeAction,&aActionTable,pEntry);
1538*cdf0e10cSrcweir 							break;
1539*cdf0e10cSrcweir 						}
1540*cdf0e10cSrcweir 						default:
1541*cdf0e10cSrcweir 						{
1542*cdf0e10cSrcweir 							bTheTestFlag=InsertChilds(&aActionTable,pEntry);
1543*cdf0e10cSrcweir 							break;
1544*cdf0e10cSrcweir 						}
1545*cdf0e10cSrcweir 					}
1546*cdf0e10cSrcweir 					aActionTable.Clear();
1547*cdf0e10cSrcweir 
1548*cdf0e10cSrcweir 				}
1549*cdf0e10cSrcweir 				else
1550*cdf0e10cSrcweir 				{
1551*cdf0e10cSrcweir 					bTheTestFlag=InsertAcceptedORejected(pEntry);
1552*cdf0e10cSrcweir 				}
1553*cdf0e10cSrcweir 				if(bTheTestFlag) pTheView->InsertEntry(aStrNoEntry,NULL,Color(COL_GRAY),pEntry);
1554*cdf0e10cSrcweir 			}
1555*cdf0e10cSrcweir 
1556*cdf0e10cSrcweir 		}
1557*cdf0e10cSrcweir 	}
1558*cdf0e10cSrcweir 	SetPointer(Pointer(POINTER_ARROW));
1559*cdf0e10cSrcweir 	return (sal_uLong) sal_True;
1560*cdf0e10cSrcweir }
1561*cdf0e10cSrcweir 
1562*cdf0e10cSrcweir 
1563*cdf0e10cSrcweir void ScAcceptChgDlg::AppendChanges(ScChangeTrack* pChanges,sal_uLong nStartAction,
1564*cdf0e10cSrcweir                                    sal_uLong nEndAction, sal_uLong /* nPos */)
1565*cdf0e10cSrcweir {
1566*cdf0e10cSrcweir 	if(pChanges!=NULL)
1567*cdf0e10cSrcweir 	{
1568*cdf0e10cSrcweir 		DateTime aDateTime;
1569*cdf0e10cSrcweir 		SvLBoxEntry* pParent=NULL;
1570*cdf0e10cSrcweir 		const ScChangeAction* pScChangeAction=NULL;
1571*cdf0e10cSrcweir 		bAcceptEnableFlag=sal_True;
1572*cdf0e10cSrcweir 		bRejectEnableFlag=sal_True;
1573*cdf0e10cSrcweir 		SetPointer(Pointer(POINTER_WAIT));
1574*cdf0e10cSrcweir 		pTheView->SetUpdateMode(sal_False);
1575*cdf0e10cSrcweir 
1576*cdf0e10cSrcweir 		ScChangeActionTable ActionTable;
1577*cdf0e10cSrcweir 		sal_Bool bTheFlag=sal_False;
1578*cdf0e10cSrcweir 
1579*cdf0e10cSrcweir 		sal_Bool bFilterFlag=pTPFilter->IsDate()||pTPFilter->IsRange()||
1580*cdf0e10cSrcweir 					 pTPFilter->IsAuthor()||pTPFilter->IsComment();
1581*cdf0e10cSrcweir 
1582*cdf0e10cSrcweir 		bUseColor=bFilterFlag;
1583*cdf0e10cSrcweir 
1584*cdf0e10cSrcweir 		for(sal_uLong i=nStartAction;i<=nEndAction;i++)
1585*cdf0e10cSrcweir 		{
1586*cdf0e10cSrcweir 			pScChangeAction=pChanges->GetAction(i);
1587*cdf0e10cSrcweir 			if(pScChangeAction==NULL) continue;
1588*cdf0e10cSrcweir 
1589*cdf0e10cSrcweir 
1590*cdf0e10cSrcweir 			switch(pScChangeAction->GetState())
1591*cdf0e10cSrcweir 			{
1592*cdf0e10cSrcweir 				case SC_CAS_VIRGIN:
1593*cdf0e10cSrcweir 
1594*cdf0e10cSrcweir 					if(pScChangeAction->IsDialogRoot())
1595*cdf0e10cSrcweir 					{
1596*cdf0e10cSrcweir 						if(pScChangeAction->IsDialogParent())
1597*cdf0e10cSrcweir 							pParent=InsertChangeAction(pScChangeAction,SC_CAS_VIRGIN);
1598*cdf0e10cSrcweir 						else
1599*cdf0e10cSrcweir 							pParent=InsertFilteredAction(pScChangeAction,SC_CAS_VIRGIN);
1600*cdf0e10cSrcweir 					}
1601*cdf0e10cSrcweir 					else
1602*cdf0e10cSrcweir 						pParent=NULL;
1603*cdf0e10cSrcweir 
1604*cdf0e10cSrcweir 					bTheFlag=sal_True;
1605*cdf0e10cSrcweir 					break;
1606*cdf0e10cSrcweir 
1607*cdf0e10cSrcweir 				case SC_CAS_ACCEPTED:
1608*cdf0e10cSrcweir 					pParent=NULL;
1609*cdf0e10cSrcweir 					nAcceptCount++;
1610*cdf0e10cSrcweir 					break;
1611*cdf0e10cSrcweir 
1612*cdf0e10cSrcweir 				case SC_CAS_REJECTED:
1613*cdf0e10cSrcweir 					pParent=NULL;
1614*cdf0e10cSrcweir 					nRejectCount++;
1615*cdf0e10cSrcweir 					break;
1616*cdf0e10cSrcweir 			}
1617*cdf0e10cSrcweir 
1618*cdf0e10cSrcweir 			if(pParent!=NULL && pScChangeAction->IsDialogParent())
1619*cdf0e10cSrcweir 			{
1620*cdf0e10cSrcweir 				if(!bFilterFlag)
1621*cdf0e10cSrcweir 				{
1622*cdf0e10cSrcweir 					pParent->EnableChildsOnDemand(sal_True);
1623*cdf0e10cSrcweir 				}
1624*cdf0e10cSrcweir 				else
1625*cdf0e10cSrcweir 				{
1626*cdf0e10cSrcweir 					sal_Bool bTestFlag=bHasFilterEntry;
1627*cdf0e10cSrcweir 					bHasFilterEntry=sal_False;
1628*cdf0e10cSrcweir 					if(Expand(pChanges,pScChangeAction,pParent,!bTestFlag)&&!bTestFlag)
1629*cdf0e10cSrcweir                         pTheView->RemoveEntry(pParent);
1630*cdf0e10cSrcweir 				}
1631*cdf0e10cSrcweir 			}
1632*cdf0e10cSrcweir 
1633*cdf0e10cSrcweir 			pScChangeAction=pScChangeAction->GetNext();
1634*cdf0e10cSrcweir 		}
1635*cdf0e10cSrcweir 
1636*cdf0e10cSrcweir         if( bTheFlag && (!pDoc->IsDocEditable() || pChanges->IsProtected()) )
1637*cdf0e10cSrcweir 			bTheFlag=sal_False;
1638*cdf0e10cSrcweir 
1639*cdf0e10cSrcweir 		pTPView->EnableAccept(bTheFlag);
1640*cdf0e10cSrcweir 		pTPView->EnableAcceptAll(bTheFlag);
1641*cdf0e10cSrcweir 		pTPView->EnableReject(bTheFlag);
1642*cdf0e10cSrcweir 		pTPView->EnableRejectAll(bTheFlag);
1643*cdf0e10cSrcweir 
1644*cdf0e10cSrcweir 		pTheView->SetUpdateMode(sal_True);
1645*cdf0e10cSrcweir 		SetPointer(Pointer(POINTER_ARROW));
1646*cdf0e10cSrcweir 	}
1647*cdf0e10cSrcweir }
1648*cdf0e10cSrcweir 
1649*cdf0e10cSrcweir void ScAcceptChgDlg::RemoveEntrys(sal_uLong nStartAction,sal_uLong nEndAction)
1650*cdf0e10cSrcweir {
1651*cdf0e10cSrcweir 
1652*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_False);
1653*cdf0e10cSrcweir 
1654*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=pTheView->GetCurEntry();
1655*cdf0e10cSrcweir 
1656*cdf0e10cSrcweir 	ScRedlinData *pEntryData=NULL;
1657*cdf0e10cSrcweir 
1658*cdf0e10cSrcweir 	if(pEntry!=NULL)
1659*cdf0e10cSrcweir 		pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1660*cdf0e10cSrcweir 
1661*cdf0e10cSrcweir 	sal_uLong nAction=0;
1662*cdf0e10cSrcweir 	if(pEntryData!=NULL)
1663*cdf0e10cSrcweir 	{
1664*cdf0e10cSrcweir 		nAction=pEntryData->nActionNo;
1665*cdf0e10cSrcweir 	}
1666*cdf0e10cSrcweir 
1667*cdf0e10cSrcweir 	if(nAction>=nStartAction && nAction<=nEndAction)
1668*cdf0e10cSrcweir 	{
1669*cdf0e10cSrcweir 		pTheView->SetCurEntry(pTheView->GetModel()->GetEntry(0));
1670*cdf0e10cSrcweir 	}
1671*cdf0e10cSrcweir 
1672*cdf0e10cSrcweir 	sal_Bool bRemove=sal_False;
1673*cdf0e10cSrcweir 
1674*cdf0e10cSrcweir 	// MUST do it backwards, don't delete parents before children and GPF
1675*cdf0e10cSrcweir 	pEntry=pTheView->Last();
1676*cdf0e10cSrcweir 	while(pEntry!=NULL)
1677*cdf0e10cSrcweir 	{
1678*cdf0e10cSrcweir 		bRemove=sal_False;
1679*cdf0e10cSrcweir 		pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1680*cdf0e10cSrcweir 		if(pEntryData!=NULL)
1681*cdf0e10cSrcweir 		{
1682*cdf0e10cSrcweir 			nAction=pEntryData->nActionNo;
1683*cdf0e10cSrcweir 
1684*cdf0e10cSrcweir 			if(nStartAction<=nAction && nAction<=nEndAction) bRemove=sal_True;
1685*cdf0e10cSrcweir 
1686*cdf0e10cSrcweir 
1687*cdf0e10cSrcweir 		}
1688*cdf0e10cSrcweir 		SvLBoxEntry* pPrevEntry = pTheView->Prev(pEntry);
1689*cdf0e10cSrcweir 
1690*cdf0e10cSrcweir 		if(bRemove)
1691*cdf0e10cSrcweir 		{
1692*cdf0e10cSrcweir 			//delete pEntryData;
1693*cdf0e10cSrcweir             pTheView->RemoveEntry(pEntry);
1694*cdf0e10cSrcweir 		}
1695*cdf0e10cSrcweir 		pEntry=pPrevEntry;
1696*cdf0e10cSrcweir 	}
1697*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_True);
1698*cdf0e10cSrcweir 
1699*cdf0e10cSrcweir }
1700*cdf0e10cSrcweir 
1701*cdf0e10cSrcweir void ScAcceptChgDlg::UpdateEntrys(ScChangeTrack* pChgTrack, sal_uLong nStartAction,sal_uLong nEndAction)
1702*cdf0e10cSrcweir {
1703*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_False);
1704*cdf0e10cSrcweir 
1705*cdf0e10cSrcweir 	sal_uLong nPos=LIST_APPEND;
1706*cdf0e10cSrcweir 
1707*cdf0e10cSrcweir 	sal_Bool bRemove=sal_False;
1708*cdf0e10cSrcweir 
1709*cdf0e10cSrcweir 	SvLBoxEntry* pEntry=pTheView->First();
1710*cdf0e10cSrcweir 	SvLBoxEntry* pNextEntry = (pEntry ? pTheView->NextSibling(pEntry) : NULL);
1711*cdf0e10cSrcweir 	SvLBoxEntry* pLastEntry=NULL;
1712*cdf0e10cSrcweir 	while(pEntry!=NULL)
1713*cdf0e10cSrcweir 	{
1714*cdf0e10cSrcweir 		bRemove=sal_False;
1715*cdf0e10cSrcweir 		ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1716*cdf0e10cSrcweir 		if(pEntryData!=NULL)
1717*cdf0e10cSrcweir 		{
1718*cdf0e10cSrcweir 			ScChangeAction* pScChangeAction=
1719*cdf0e10cSrcweir 					(ScChangeAction*) pEntryData->pData;
1720*cdf0e10cSrcweir 
1721*cdf0e10cSrcweir 			sal_uLong nAction=pScChangeAction->GetActionNumber();
1722*cdf0e10cSrcweir 
1723*cdf0e10cSrcweir 			if(nStartAction<=nAction && nAction<=nEndAction) bRemove=sal_True;
1724*cdf0e10cSrcweir 		}
1725*cdf0e10cSrcweir 
1726*cdf0e10cSrcweir 		if(bRemove)
1727*cdf0e10cSrcweir 		{
1728*cdf0e10cSrcweir 			nPos=pEntry->GetChildListPos();
1729*cdf0e10cSrcweir             pTheView->RemoveEntry(pEntry);
1730*cdf0e10cSrcweir 
1731*cdf0e10cSrcweir 			if(pLastEntry==NULL) pLastEntry=pTheView->First();
1732*cdf0e10cSrcweir 			if(pLastEntry!=NULL)
1733*cdf0e10cSrcweir 			{
1734*cdf0e10cSrcweir 				pNextEntry=pTheView->Next(pLastEntry);
1735*cdf0e10cSrcweir 
1736*cdf0e10cSrcweir 				if(pNextEntry==NULL)
1737*cdf0e10cSrcweir 				{
1738*cdf0e10cSrcweir 					pNextEntry=pLastEntry;
1739*cdf0e10cSrcweir 					pLastEntry=NULL;
1740*cdf0e10cSrcweir 				}
1741*cdf0e10cSrcweir 			}
1742*cdf0e10cSrcweir 			else
1743*cdf0e10cSrcweir 				pNextEntry=NULL;
1744*cdf0e10cSrcweir 
1745*cdf0e10cSrcweir 		}
1746*cdf0e10cSrcweir 		else
1747*cdf0e10cSrcweir 		{
1748*cdf0e10cSrcweir 			pLastEntry = pEntry;
1749*cdf0e10cSrcweir 			pNextEntry = pTheView->Next(pEntry);
1750*cdf0e10cSrcweir 		}
1751*cdf0e10cSrcweir 		pEntry=pNextEntry;
1752*cdf0e10cSrcweir 	}
1753*cdf0e10cSrcweir 
1754*cdf0e10cSrcweir 	if(nStartAction==nEndAction)
1755*cdf0e10cSrcweir 		AppendChanges(pChgTrack,nStartAction,nEndAction,nPos);
1756*cdf0e10cSrcweir 	else
1757*cdf0e10cSrcweir 		AppendChanges(pChgTrack,nStartAction,nEndAction);
1758*cdf0e10cSrcweir 
1759*cdf0e10cSrcweir 	pTheView->SetUpdateMode(sal_True);
1760*cdf0e10cSrcweir 
1761*cdf0e10cSrcweir }
1762*cdf0e10cSrcweir 
1763*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, ChgTrackModHdl, ScChangeTrack*, pChgTrack)
1764*cdf0e10cSrcweir {
1765*cdf0e10cSrcweir //	if(bScAcceptChgDlgIsDead) return 0;
1766*cdf0e10cSrcweir 
1767*cdf0e10cSrcweir 	ScChangeTrackMsgQueue& aMsgQueue= pChgTrack->GetMsgQueue();
1768*cdf0e10cSrcweir 
1769*cdf0e10cSrcweir 	ScChangeTrackMsgInfo* pTrackInfo=aMsgQueue.Get();
1770*cdf0e10cSrcweir 	sal_uLong	nStartAction;
1771*cdf0e10cSrcweir 	sal_uLong	nEndAction;
1772*cdf0e10cSrcweir 
1773*cdf0e10cSrcweir 	while(pTrackInfo!=NULL)
1774*cdf0e10cSrcweir 	{
1775*cdf0e10cSrcweir 		nStartAction=pTrackInfo->nStartAction;
1776*cdf0e10cSrcweir 		nEndAction=pTrackInfo->nEndAction;
1777*cdf0e10cSrcweir 
1778*cdf0e10cSrcweir 		if(!bIgnoreMsg)
1779*cdf0e10cSrcweir 		{
1780*cdf0e10cSrcweir 			bNoSelection=sal_True;
1781*cdf0e10cSrcweir 
1782*cdf0e10cSrcweir 			switch(pTrackInfo->eMsgType)
1783*cdf0e10cSrcweir 			{
1784*cdf0e10cSrcweir 				case SC_CTM_APPEND: AppendChanges(pChgTrack,nStartAction,nEndAction);
1785*cdf0e10cSrcweir 									break;
1786*cdf0e10cSrcweir 				case SC_CTM_REMOVE: RemoveEntrys(nStartAction,nEndAction);
1787*cdf0e10cSrcweir 									break;
1788*cdf0e10cSrcweir 				case SC_CTM_PARENT:
1789*cdf0e10cSrcweir 				case SC_CTM_CHANGE: //bNeedsUpdate=sal_True;
1790*cdf0e10cSrcweir 									UpdateEntrys(pChgTrack,nStartAction,nEndAction);
1791*cdf0e10cSrcweir 									break;
1792*cdf0e10cSrcweir                 default:
1793*cdf0e10cSrcweir                 {
1794*cdf0e10cSrcweir                     // added to avoid warnings
1795*cdf0e10cSrcweir                 }
1796*cdf0e10cSrcweir 			}
1797*cdf0e10cSrcweir 		}
1798*cdf0e10cSrcweir 		delete pTrackInfo;
1799*cdf0e10cSrcweir 		pTrackInfo=aMsgQueue.Get();
1800*cdf0e10cSrcweir 	}
1801*cdf0e10cSrcweir 
1802*cdf0e10cSrcweir 	return 0;
1803*cdf0e10cSrcweir }
1804*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, ReOpenTimerHdl, Timer*, EMPTYARG )
1805*cdf0e10cSrcweir {
1806*cdf0e10cSrcweir 	ScSimpleRefDlgWrapper::SetAutoReOpen(sal_True);
1807*cdf0e10cSrcweir 	aAcceptChgCtr.ShowFilterPage();
1808*cdf0e10cSrcweir 	RefHandle(NULL);
1809*cdf0e10cSrcweir 
1810*cdf0e10cSrcweir 	return 0;
1811*cdf0e10cSrcweir }
1812*cdf0e10cSrcweir 
1813*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, UpdateSelectionHdl, Timer*, EMPTYARG )
1814*cdf0e10cSrcweir {
1815*cdf0e10cSrcweir     ScTabView* pTabView = pViewData->GetView();
1816*cdf0e10cSrcweir 
1817*cdf0e10cSrcweir     sal_Bool bAcceptFlag = sal_True;
1818*cdf0e10cSrcweir     sal_Bool bRejectFlag = sal_True;
1819*cdf0e10cSrcweir     sal_Bool bContMark = sal_False;
1820*cdf0e10cSrcweir 
1821*cdf0e10cSrcweir     pTabView->DoneBlockMode();  // clears old marking
1822*cdf0e10cSrcweir     SvLBoxEntry* pEntry = pTheView->FirstSelected();
1823*cdf0e10cSrcweir     while( pEntry )
1824*cdf0e10cSrcweir 	{
1825*cdf0e10cSrcweir         ScRedlinData* pEntryData = (ScRedlinData*) pEntry->GetUserData();
1826*cdf0e10cSrcweir         if( pEntryData )
1827*cdf0e10cSrcweir 		{
1828*cdf0e10cSrcweir             bRejectFlag &= pEntryData->bIsRejectable;
1829*cdf0e10cSrcweir             bAcceptFlag &= pEntryData->bIsAcceptable;
1830*cdf0e10cSrcweir 
1831*cdf0e10cSrcweir             const ScChangeAction* pScChangeAction = (ScChangeAction*) pEntryData->pData;
1832*cdf0e10cSrcweir             if( pScChangeAction && (pScChangeAction->GetType() != SC_CAT_DELETE_TABS) &&
1833*cdf0e10cSrcweir                     (!pEntryData->bDisabled || pScChangeAction->IsVisible()) )
1834*cdf0e10cSrcweir             {
1835*cdf0e10cSrcweir                 const ScBigRange& rBigRange = pScChangeAction->GetBigRange();
1836*cdf0e10cSrcweir                 if( rBigRange.IsValid( pDoc ) && IsActive() )
1837*cdf0e10cSrcweir                 {
1838*cdf0e10cSrcweir                     sal_Bool bSetCursor = !pTheView->NextSelected( pEntry );
1839*cdf0e10cSrcweir                     pTabView->MarkRange( rBigRange.MakeRange(), bSetCursor, bContMark );
1840*cdf0e10cSrcweir                     bContMark = sal_True;
1841*cdf0e10cSrcweir                 }
1842*cdf0e10cSrcweir             }
1843*cdf0e10cSrcweir 		}
1844*cdf0e10cSrcweir 		else
1845*cdf0e10cSrcweir 		{
1846*cdf0e10cSrcweir             bAcceptFlag = sal_False;
1847*cdf0e10cSrcweir             bRejectFlag = sal_False;
1848*cdf0e10cSrcweir 		}
1849*cdf0e10cSrcweir         bAcceptEnableFlag = bAcceptFlag;
1850*cdf0e10cSrcweir         bRejectEnableFlag = bRejectFlag;
1851*cdf0e10cSrcweir 
1852*cdf0e10cSrcweir         pEntry = pTheView->NextSelected( pEntry );
1853*cdf0e10cSrcweir 	}
1854*cdf0e10cSrcweir 
1855*cdf0e10cSrcweir     ScChangeTrack* pChanges = pDoc->GetChangeTrack();
1856*cdf0e10cSrcweir     sal_Bool bEnable = pDoc->IsDocEditable() && pChanges && !pChanges->IsProtected();
1857*cdf0e10cSrcweir     pTPView->EnableAccept( bAcceptFlag && bEnable );
1858*cdf0e10cSrcweir     pTPView->EnableReject( bRejectFlag && bEnable );
1859*cdf0e10cSrcweir 
1860*cdf0e10cSrcweir 	return 0;
1861*cdf0e10cSrcweir }
1862*cdf0e10cSrcweir 
1863*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, CommandHdl, Control*, EMPTYARG )
1864*cdf0e10cSrcweir {
1865*cdf0e10cSrcweir 
1866*cdf0e10cSrcweir 	const CommandEvent aCEvt(pTheView->GetCommandEvent());
1867*cdf0e10cSrcweir 
1868*cdf0e10cSrcweir 	if(aCEvt.GetCommand()==COMMAND_CONTEXTMENU)
1869*cdf0e10cSrcweir 	{
1870*cdf0e10cSrcweir 		ScPopupMenu aPopup(ScResId(RID_POPUP_CHANGES));
1871*cdf0e10cSrcweir 
1872*cdf0e10cSrcweir 		aPopup.SetMenuFlags(MENU_FLAG_HIDEDISABLEDENTRIES);
1873*cdf0e10cSrcweir 
1874*cdf0e10cSrcweir 		SvLBoxEntry* pEntry=pTheView->GetCurEntry();
1875*cdf0e10cSrcweir 		if(pEntry!=NULL)
1876*cdf0e10cSrcweir 		{
1877*cdf0e10cSrcweir 			pTheView->Select(pEntry);
1878*cdf0e10cSrcweir 		}
1879*cdf0e10cSrcweir 		else
1880*cdf0e10cSrcweir 		{
1881*cdf0e10cSrcweir 			aPopup.Deactivate();
1882*cdf0e10cSrcweir 		}
1883*cdf0e10cSrcweir 
1884*cdf0e10cSrcweir 		sal_uInt16 nSortedCol= pTheView->GetSortedCol();
1885*cdf0e10cSrcweir 
1886*cdf0e10cSrcweir 		if(nSortedCol!=0xFFFF)
1887*cdf0e10cSrcweir 		{
1888*cdf0e10cSrcweir 			sal_uInt16 nItemId=nSortedCol+SC_SUB_SORT+1;
1889*cdf0e10cSrcweir 
1890*cdf0e10cSrcweir 			aPopup.CheckItem(nItemId);
1891*cdf0e10cSrcweir 
1892*cdf0e10cSrcweir 			PopupMenu *pSubMenu = aPopup.GetPopupMenu(SC_SUB_SORT);
1893*cdf0e10cSrcweir 			if (pSubMenu)
1894*cdf0e10cSrcweir 			{
1895*cdf0e10cSrcweir 				pSubMenu->CheckItem(nItemId);
1896*cdf0e10cSrcweir 			}
1897*cdf0e10cSrcweir 		}
1898*cdf0e10cSrcweir 
1899*cdf0e10cSrcweir 		aPopup.EnableItem(SC_CHANGES_COMMENT,sal_False);
1900*cdf0e10cSrcweir 
1901*cdf0e10cSrcweir 		if(pDoc->IsDocEditable() && pEntry!=NULL)
1902*cdf0e10cSrcweir 		{
1903*cdf0e10cSrcweir 			ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1904*cdf0e10cSrcweir 			if(pEntryData!=NULL)
1905*cdf0e10cSrcweir 			{
1906*cdf0e10cSrcweir 				ScChangeAction* pScChangeAction=
1907*cdf0e10cSrcweir 						(ScChangeAction*) pEntryData->pData;
1908*cdf0e10cSrcweir 				if(pScChangeAction!=NULL && !pTheView->GetParent(pEntry))
1909*cdf0e10cSrcweir 					aPopup.EnableItem(SC_CHANGES_COMMENT);
1910*cdf0e10cSrcweir 			}
1911*cdf0e10cSrcweir 		}
1912*cdf0e10cSrcweir 
1913*cdf0e10cSrcweir 		sal_uInt16 nCommand=aPopup.Execute( this, GetPointerPosPixel() );
1914*cdf0e10cSrcweir 
1915*cdf0e10cSrcweir 
1916*cdf0e10cSrcweir 		if(nCommand)
1917*cdf0e10cSrcweir 		{
1918*cdf0e10cSrcweir 			if(nCommand==SC_CHANGES_COMMENT)
1919*cdf0e10cSrcweir 			{
1920*cdf0e10cSrcweir 				if(pEntry!=NULL)
1921*cdf0e10cSrcweir 				{
1922*cdf0e10cSrcweir 					ScRedlinData *pEntryData=(ScRedlinData *)(pEntry->GetUserData());
1923*cdf0e10cSrcweir 					if(pEntryData!=NULL)
1924*cdf0e10cSrcweir 					{
1925*cdf0e10cSrcweir 						ScChangeAction* pScChangeAction=
1926*cdf0e10cSrcweir 								(ScChangeAction*) pEntryData->pData;
1927*cdf0e10cSrcweir 
1928*cdf0e10cSrcweir 						pViewData->GetDocShell()->ExecuteChangeCommentDialog( pScChangeAction, this,sal_False);
1929*cdf0e10cSrcweir 					}
1930*cdf0e10cSrcweir 				}
1931*cdf0e10cSrcweir 			}
1932*cdf0e10cSrcweir 			else
1933*cdf0e10cSrcweir 			{
1934*cdf0e10cSrcweir 				sal_Bool bSortDir=pTheView->GetSortDirection();
1935*cdf0e10cSrcweir 				sal_uInt16 nDialogCol=nCommand-SC_SUB_SORT-1;
1936*cdf0e10cSrcweir 				if(nSortedCol==nDialogCol) bSortDir=!bSortDir;
1937*cdf0e10cSrcweir 				pTheView->SortByCol(nDialogCol,bSortDir);
1938*cdf0e10cSrcweir 				/*
1939*cdf0e10cSrcweir 				SC_SUB_SORT
1940*cdf0e10cSrcweir 				SC_SORT_ACTION
1941*cdf0e10cSrcweir 				SC_SORT_POSITION
1942*cdf0e10cSrcweir 				SC_SORT_AUTHOR
1943*cdf0e10cSrcweir 				SC_SORT_DATE
1944*cdf0e10cSrcweir 				SC_SORT_COMMENT
1945*cdf0e10cSrcweir 				*/
1946*cdf0e10cSrcweir 			}
1947*cdf0e10cSrcweir 		}
1948*cdf0e10cSrcweir 	}
1949*cdf0e10cSrcweir 	return 0;
1950*cdf0e10cSrcweir }
1951*cdf0e10cSrcweir 
1952*cdf0e10cSrcweir void ScAcceptChgDlg::Initialize(SfxChildWinInfo *pInfo)
1953*cdf0e10cSrcweir {
1954*cdf0e10cSrcweir 	String aStr;
1955*cdf0e10cSrcweir 	if(pInfo!=NULL)
1956*cdf0e10cSrcweir 	{
1957*cdf0e10cSrcweir 		if ( pInfo->aExtraString.Len() )
1958*cdf0e10cSrcweir 		{
1959*cdf0e10cSrcweir 			xub_StrLen nPos = pInfo->aExtraString.Search(
1960*cdf0e10cSrcweir 				String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("AcceptChgDat:")));
1961*cdf0e10cSrcweir 
1962*cdf0e10cSrcweir 			// Versuche, den Alignment-String "ALIGN:(...)" einzulesen; wenn
1963*cdf0e10cSrcweir 			// er nicht vorhanden ist, liegt eine "altere Version vor
1964*cdf0e10cSrcweir 			if ( nPos != STRING_NOTFOUND )
1965*cdf0e10cSrcweir 			{
1966*cdf0e10cSrcweir 				xub_StrLen n1 = pInfo->aExtraString.Search('(', nPos);
1967*cdf0e10cSrcweir 				if ( n1 != STRING_NOTFOUND )
1968*cdf0e10cSrcweir 				{
1969*cdf0e10cSrcweir 					xub_StrLen n2 = pInfo->aExtraString.Search(')', n1);
1970*cdf0e10cSrcweir 					if ( n2 != STRING_NOTFOUND )
1971*cdf0e10cSrcweir 					{
1972*cdf0e10cSrcweir 						// Alignment-String herausschneiden
1973*cdf0e10cSrcweir 						aStr = pInfo->aExtraString.Copy(nPos, n2 - nPos + 1);
1974*cdf0e10cSrcweir 						pInfo->aExtraString.Erase(nPos, n2 - nPos + 1);
1975*cdf0e10cSrcweir 						aStr.Erase(0, n1-nPos+1);
1976*cdf0e10cSrcweir 					}
1977*cdf0e10cSrcweir 				}
1978*cdf0e10cSrcweir 			}
1979*cdf0e10cSrcweir 		}
1980*cdf0e10cSrcweir 	}
1981*cdf0e10cSrcweir 	SfxModelessDialog::Initialize(pInfo);
1982*cdf0e10cSrcweir 
1983*cdf0e10cSrcweir 	if ( aStr.Len())
1984*cdf0e10cSrcweir 	{
1985*cdf0e10cSrcweir 		sal_uInt16 nCount=(sal_uInt16)aStr.ToInt32();
1986*cdf0e10cSrcweir 
1987*cdf0e10cSrcweir 		for(sal_uInt16 i=0;i<nCount;i++)
1988*cdf0e10cSrcweir 		{
1989*cdf0e10cSrcweir 			xub_StrLen n1 = aStr.Search(';');
1990*cdf0e10cSrcweir 			aStr.Erase(0, n1+1);
1991*cdf0e10cSrcweir 			pTheView->SetTab(i,(sal_uInt16)aStr.ToInt32(),MAP_PIXEL);
1992*cdf0e10cSrcweir 		}
1993*cdf0e10cSrcweir 	}
1994*cdf0e10cSrcweir }
1995*cdf0e10cSrcweir 
1996*cdf0e10cSrcweir //-------------------------------------------------------------------------
1997*cdf0e10cSrcweir 
1998*cdf0e10cSrcweir void ScAcceptChgDlg::FillInfo(SfxChildWinInfo& rInfo) const
1999*cdf0e10cSrcweir {
2000*cdf0e10cSrcweir 	SfxModelessDialog::FillInfo(rInfo);
2001*cdf0e10cSrcweir 	rInfo.aExtraString.AppendAscii(RTL_CONSTASCII_STRINGPARAM( "AcceptChgDat:(" ));
2002*cdf0e10cSrcweir 
2003*cdf0e10cSrcweir 	sal_uInt16	nCount=pTheView->TabCount();
2004*cdf0e10cSrcweir 
2005*cdf0e10cSrcweir 	rInfo.aExtraString += String::CreateFromInt32(nCount);
2006*cdf0e10cSrcweir 	rInfo.aExtraString += ';';
2007*cdf0e10cSrcweir 	for(sal_uInt16 i=0;i<nCount;i++)
2008*cdf0e10cSrcweir 	{
2009*cdf0e10cSrcweir 		rInfo.aExtraString += String::CreateFromInt32(pTheView->GetTab(i));
2010*cdf0e10cSrcweir 		rInfo.aExtraString += ';';
2011*cdf0e10cSrcweir 	}
2012*cdf0e10cSrcweir 	rInfo.aExtraString += ')';
2013*cdf0e10cSrcweir }
2014*cdf0e10cSrcweir 
2015*cdf0e10cSrcweir void ScAcceptChgDlg::InitFilter()
2016*cdf0e10cSrcweir {
2017*cdf0e10cSrcweir 	if(pTPFilter->IsDate()||pTPFilter->IsRange()||
2018*cdf0e10cSrcweir 		pTPFilter->IsAuthor()||pTPFilter->IsComment())
2019*cdf0e10cSrcweir 	{
2020*cdf0e10cSrcweir 		pTheView->SetFilterDate(pTPFilter->IsDate());
2021*cdf0e10cSrcweir 		pTheView->SetDateTimeMode(pTPFilter->GetDateMode());
2022*cdf0e10cSrcweir 		pTheView->SetFirstDate(pTPFilter->GetFirstDate());
2023*cdf0e10cSrcweir 		pTheView->SetLastDate(pTPFilter->GetLastDate());
2024*cdf0e10cSrcweir 		pTheView->SetFirstTime(pTPFilter->GetFirstTime());
2025*cdf0e10cSrcweir 		pTheView->SetLastTime(pTPFilter->GetLastTime());
2026*cdf0e10cSrcweir 		pTheView->SetFilterAuthor(pTPFilter->IsAuthor());
2027*cdf0e10cSrcweir 		pTheView->SetAuthor(pTPFilter->GetSelectedAuthor());
2028*cdf0e10cSrcweir 
2029*cdf0e10cSrcweir 		pTheView->SetFilterComment(pTPFilter->IsComment());
2030*cdf0e10cSrcweir 
2031*cdf0e10cSrcweir 		utl::SearchParam aSearchParam( pTPFilter->GetComment(),
2032*cdf0e10cSrcweir 				utl::SearchParam::SRCH_REGEXP,sal_False,sal_False,sal_False );
2033*cdf0e10cSrcweir 
2034*cdf0e10cSrcweir 		pTheView->SetCommentParams(&aSearchParam);
2035*cdf0e10cSrcweir 
2036*cdf0e10cSrcweir 		pTheView->UpdateFilterTest();
2037*cdf0e10cSrcweir 	}
2038*cdf0e10cSrcweir }
2039*cdf0e10cSrcweir 
2040*cdf0e10cSrcweir //UNUSED2008-05  void ScAcceptChgDlg::SetMyStaticData()
2041*cdf0e10cSrcweir //UNUSED2008-05  {
2042*cdf0e10cSrcweir //UNUSED2008-05  }
2043*cdf0e10cSrcweir 
2044*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, FilterModified, SvxTPFilter*, EMPTYARG )
2045*cdf0e10cSrcweir {
2046*cdf0e10cSrcweir 	return 0;
2047*cdf0e10cSrcweir }
2048*cdf0e10cSrcweir 
2049*cdf0e10cSrcweir #define CALC_DATE		3
2050*cdf0e10cSrcweir #define CALC_POS		1
2051*cdf0e10cSrcweir 
2052*cdf0e10cSrcweir IMPL_LINK( ScAcceptChgDlg, ColCompareHdl, SvSortData*, pSortData )
2053*cdf0e10cSrcweir {
2054*cdf0e10cSrcweir 	StringCompare eCompare=COMPARE_EQUAL;
2055*cdf0e10cSrcweir 	SCCOL nSortCol= static_cast<SCCOL>(pTheView->GetSortedCol());
2056*cdf0e10cSrcweir 
2057*cdf0e10cSrcweir 	if(pSortData)
2058*cdf0e10cSrcweir 	{
2059*cdf0e10cSrcweir 		SvLBoxEntry* pLeft = (SvLBoxEntry*)(pSortData->pLeft );
2060*cdf0e10cSrcweir 		SvLBoxEntry* pRight = (SvLBoxEntry*)(pSortData->pRight );
2061*cdf0e10cSrcweir 
2062*cdf0e10cSrcweir 		if(CALC_DATE==nSortCol)
2063*cdf0e10cSrcweir 		{
2064*cdf0e10cSrcweir 			RedlinData *pLeftData=(RedlinData *)(pLeft->GetUserData());
2065*cdf0e10cSrcweir 			RedlinData *pRightData=(RedlinData *)(pRight->GetUserData());
2066*cdf0e10cSrcweir 
2067*cdf0e10cSrcweir 			if(pLeftData!=NULL && pRightData!=NULL)
2068*cdf0e10cSrcweir 			{
2069*cdf0e10cSrcweir 				if(pLeftData->aDateTime < pRightData->aDateTime)
2070*cdf0e10cSrcweir 				{
2071*cdf0e10cSrcweir 					eCompare=COMPARE_LESS;
2072*cdf0e10cSrcweir 				}
2073*cdf0e10cSrcweir 				else if(pLeftData->aDateTime > pRightData->aDateTime)
2074*cdf0e10cSrcweir 				{
2075*cdf0e10cSrcweir 					eCompare=COMPARE_GREATER;
2076*cdf0e10cSrcweir 				}
2077*cdf0e10cSrcweir 				return eCompare;
2078*cdf0e10cSrcweir 			}
2079*cdf0e10cSrcweir 		}
2080*cdf0e10cSrcweir 		else if(CALC_POS==nSortCol)
2081*cdf0e10cSrcweir 		{
2082*cdf0e10cSrcweir 			ScRedlinData *pLeftData=(ScRedlinData *)(pLeft->GetUserData());
2083*cdf0e10cSrcweir 			ScRedlinData *pRightData=(ScRedlinData *)(pRight->GetUserData());
2084*cdf0e10cSrcweir 
2085*cdf0e10cSrcweir 			if(pLeftData!=NULL && pRightData!=NULL)
2086*cdf0e10cSrcweir 			{
2087*cdf0e10cSrcweir 				eCompare=COMPARE_GREATER;
2088*cdf0e10cSrcweir 
2089*cdf0e10cSrcweir 				if(pLeftData->nTable < pRightData->nTable)
2090*cdf0e10cSrcweir 				{
2091*cdf0e10cSrcweir 					eCompare=COMPARE_LESS;
2092*cdf0e10cSrcweir 				}
2093*cdf0e10cSrcweir 				else if(pLeftData->nTable == pRightData->nTable)
2094*cdf0e10cSrcweir 				{
2095*cdf0e10cSrcweir 					if(pLeftData->nRow < pRightData->nRow)
2096*cdf0e10cSrcweir 					{
2097*cdf0e10cSrcweir 						eCompare=COMPARE_LESS;
2098*cdf0e10cSrcweir 					}
2099*cdf0e10cSrcweir 					else if(pLeftData->nRow == pRightData->nRow)
2100*cdf0e10cSrcweir 					{
2101*cdf0e10cSrcweir 						if(pLeftData->nCol < pRightData->nCol)
2102*cdf0e10cSrcweir 						{
2103*cdf0e10cSrcweir 							eCompare=COMPARE_LESS;
2104*cdf0e10cSrcweir 						}
2105*cdf0e10cSrcweir 						else if(pLeftData->nCol == pRightData->nCol)
2106*cdf0e10cSrcweir 						{
2107*cdf0e10cSrcweir 							eCompare=COMPARE_EQUAL;
2108*cdf0e10cSrcweir 						}
2109*cdf0e10cSrcweir 					}
2110*cdf0e10cSrcweir 				}
2111*cdf0e10cSrcweir 
2112*cdf0e10cSrcweir 				return eCompare;
2113*cdf0e10cSrcweir 			}
2114*cdf0e10cSrcweir 		}
2115*cdf0e10cSrcweir 
2116*cdf0e10cSrcweir 		SvLBoxItem* pLeftItem = pTheView->GetEntryAtPos( pLeft, static_cast<sal_uInt16>(nSortCol));
2117*cdf0e10cSrcweir 		SvLBoxItem* pRightItem = pTheView->GetEntryAtPos( pRight, static_cast<sal_uInt16>(nSortCol));
2118*cdf0e10cSrcweir 
2119*cdf0e10cSrcweir 		if(pLeftItem != NULL && pRightItem != NULL)
2120*cdf0e10cSrcweir 		{
2121*cdf0e10cSrcweir 			sal_uInt16 nLeftKind=pLeftItem->IsA();
2122*cdf0e10cSrcweir 			sal_uInt16 nRightKind=pRightItem->IsA();
2123*cdf0e10cSrcweir 
2124*cdf0e10cSrcweir 			if(nRightKind == SV_ITEM_ID_LBOXSTRING &&
2125*cdf0e10cSrcweir 				nLeftKind == SV_ITEM_ID_LBOXSTRING )
2126*cdf0e10cSrcweir 			{
2127*cdf0e10cSrcweir 				eCompare= (StringCompare) ScGlobal::GetCaseCollator()->compareString(
2128*cdf0e10cSrcweir 										((SvLBoxString*)pLeftItem)->GetText(),
2129*cdf0e10cSrcweir 										((SvLBoxString*)pRightItem)->GetText());
2130*cdf0e10cSrcweir 
2131*cdf0e10cSrcweir 				if(eCompare==COMPARE_EQUAL) eCompare=COMPARE_LESS;
2132*cdf0e10cSrcweir 			}
2133*cdf0e10cSrcweir 		}
2134*cdf0e10cSrcweir 
2135*cdf0e10cSrcweir 
2136*cdf0e10cSrcweir 	}
2137*cdf0e10cSrcweir 	return eCompare;
2138*cdf0e10cSrcweir }
2139*cdf0e10cSrcweir 
2140