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