1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_svx.hxx" 30 31 // System - Includes --------------------------------------------------------- 32 #include <vcl/svapp.hxx> 33 #include <tools/shl.hxx> 34 #include <sfx2/app.hxx> 35 #include <sfx2/module.hxx> 36 #include <svtools/txtcmp.hxx> 37 #include <unotools/charclass.hxx> 38 // INCLUDE ------------------------------------------------------------------- 39 #include <editeng/unolingu.hxx> 40 #include <svx/dialmgr.hxx> 41 #include "ctredlin.hrc" 42 #include <svx/ctredlin.hxx> 43 #include "helpid.hrc" 44 45 //============================================================================ 46 // Local Defines and Function 47 //---------------------------------------------------------------------------- 48 49 inline void EnableDisable( Window& rWin, sal_Bool bEnable ) 50 { 51 if (bEnable) 52 rWin.Enable(); 53 else 54 rWin.Disable(); 55 } 56 57 static long nStaticTabs[]= 58 { 59 5,10,65,120,170,220 60 }; 61 62 #define MIN_DISTANCE 6 63 #define WRITER_AUTHOR 1 64 #define WRITER_DATE 2 65 #define CALC_AUTHOR 2 66 #define CALC_DATE 3 67 68 RedlinData::RedlinData() 69 { 70 bDisabled=sal_False; 71 pData=NULL; 72 } 73 RedlinData::~RedlinData() 74 { 75 } 76 77 //============================================================================ 78 // class SvxRedlinEntry (Eintraege fuer Liste) 79 //---------------------------------------------------------------------------- 80 81 SvxRedlinEntry::SvxRedlinEntry() 82 :SvLBoxEntry() 83 { 84 } 85 86 SvxRedlinEntry::~SvxRedlinEntry() 87 { 88 RedlinData* pRedDat=(RedlinData*) GetUserData(); 89 if(pRedDat!=NULL) 90 { 91 delete pRedDat; 92 } 93 } 94 95 /************************************************************************* 96 #* Funktionen der in den SvxRedlinTable eingefuegten Items 97 #************************************************************************/ 98 99 DBG_NAME(SvLBoxColorString); 100 101 /************************************************************************* 102 #* Member: SvLBoxColorString Datum:23.10.97 103 #*------------------------------------------------------------------------ 104 #* 105 #* Klasse: SvLBoxColorString 106 #* 107 #* Funktion: Konstruktor der Klasse SvLBoxColorString 108 #* 109 #* Input: Box- Entry,Flags, Text fuer Anzeige, Schrift 110 #* 111 #* Output: --- 112 #* 113 #************************************************************************/ 114 115 SvLBoxColorString::SvLBoxColorString( SvLBoxEntry*pEntry,sal_uInt16 nFlags,const XubString& rStr, 116 const Color& rCol) 117 118 : SvLBoxString( pEntry, nFlags, rStr ) 119 { 120 DBG_CTOR(SvLBoxColorString,0); 121 aPrivColor=rCol; 122 SetText( pEntry, rStr ); 123 } 124 125 /************************************************************************* 126 #* Member: SvLBoxColorString Datum:23.10.97 127 #*------------------------------------------------------------------------ 128 #* 129 #* Klasse: SvLBoxColorString 130 #* 131 #* Funktion: Default Konstruktor der Klasse SvLBoxColorString 132 #* 133 #* Input: --- 134 #* 135 #* Output: --- 136 #* 137 #************************************************************************/ 138 139 SvLBoxColorString::SvLBoxColorString() 140 : SvLBoxString() 141 { 142 DBG_CTOR(SvLBoxColorString,0); 143 } 144 145 /************************************************************************* 146 #* Member: ~SvLBoxColorString Datum:23.10.97 147 #*------------------------------------------------------------------------ 148 #* 149 #* Klasse: SvLBoxColorString 150 #* 151 #* Funktion: Destruktor der Klasse SvLBoxColorString 152 #* 153 #* Input: --- 154 #* 155 #* Output: --- 156 #* 157 #************************************************************************/ 158 159 SvLBoxColorString::~SvLBoxColorString() 160 { 161 DBG_DTOR(SvLBoxColorString,0); 162 } 163 164 165 /************************************************************************* 166 #* Member: SvLBoxColorString Datum:23.10.97 167 #*------------------------------------------------------------------------ 168 #* 169 #* Klasse: SvLBoxColorString 170 #* 171 #* Funktion: Erzeugt einen neuen SvLBoxColorString 172 #* 173 #* Input: --- 174 #* 175 #* Output: SvLBoxColorString 176 #* 177 #************************************************************************/ 178 179 SvLBoxItem* SvLBoxColorString::Create() const 180 { 181 DBG_CHKTHIS(SvLBoxColorString,0); 182 return new SvLBoxColorString; 183 } 184 185 186 187 /************************************************************************* 188 #* Member: SvLBoxColorString Datum:23.10.97 189 #*------------------------------------------------------------------------ 190 #* 191 #* Klasse: SvLBoxColorString 192 #* 193 #* Funktion: Zeichenroutine des SvLBoxColorString. Gezeichnet wird 194 #* der entsprechende Text mit der eingestellten Farbe 195 #* im Ausgabe- Device. 196 #* 197 #* Input: Position, Ausgabe- Device, Flag fuer Selection, 198 #* Zeiger auf den Eintrag 199 #* 200 #* Output: --- 201 #* 202 #************************************************************************/ 203 204 void SvLBoxColorString::Paint( const Point& rPos, SvLBox& rDev, 205 sal_uInt16 nFlags, SvLBoxEntry* pEntry ) 206 { 207 Color aColor=rDev.GetTextColor(); 208 Color a2Color=aColor; 209 if(!(nFlags & SVLISTENTRYFLAG_SELECTED)) 210 { 211 rDev.SetTextColor(aPrivColor); 212 } 213 SvLBoxString::Paint(rPos,rDev,nFlags,pEntry ); 214 rDev.SetTextColor(a2Color); 215 } 216 217 //============================================================================ 218 // class SvxRedlinTable 219 //---------------------------------------------------------------------------- 220 221 SvxRedlinTable::SvxRedlinTable( Window* pParent,WinBits nBits ): 222 SvxSimpleTable(pParent,nBits ) 223 { 224 bAuthor=sal_False; 225 bDate=sal_False; 226 bIsCalc=sal_False; 227 bComment=sal_False; 228 nDatePos=WRITER_DATE; 229 pCommentSearcher=NULL; 230 SetNodeDefaultImages(); 231 } 232 233 SvxRedlinTable::SvxRedlinTable( Window* pParent,const ResId& rResId): 234 SvxSimpleTable(pParent,rResId) 235 { 236 bAuthor=sal_False; 237 bDate=sal_False; 238 bIsCalc=sal_False; 239 bComment=sal_False; 240 nDatePos=WRITER_DATE; 241 pCommentSearcher=NULL; 242 SetNodeDefaultImages(); 243 } 244 245 SvxRedlinTable::~SvxRedlinTable() 246 { 247 if(pCommentSearcher!=NULL) 248 delete pCommentSearcher; 249 } 250 251 StringCompare SvxRedlinTable::ColCompare(SvLBoxEntry* pLeft,SvLBoxEntry* pRight) 252 { 253 StringCompare eCompare=COMPARE_EQUAL; 254 255 if(aColCompareLink.IsSet()) 256 { 257 SvSortData aRedlinCompare; 258 aRedlinCompare.pLeft=pLeft; 259 aRedlinCompare.pRight=pRight; 260 eCompare=(StringCompare) aColCompareLink.Call(&aRedlinCompare); 261 } 262 else 263 { 264 if(nDatePos==GetSortedCol()) 265 { 266 RedlinData *pLeftData=(RedlinData *)(pLeft->GetUserData()); 267 RedlinData *pRightData=(RedlinData *)(pRight->GetUserData()); 268 269 if(pLeftData!=NULL && pRightData!=NULL) 270 { 271 if(pLeftData->aDateTime < pRightData->aDateTime) 272 { 273 eCompare=COMPARE_LESS; 274 } 275 else if(pLeftData->aDateTime > pRightData->aDateTime) 276 { 277 eCompare=COMPARE_GREATER; 278 } 279 } 280 else 281 eCompare=SvxSimpleTable::ColCompare(pLeft,pRight); 282 } 283 else 284 { 285 eCompare=SvxSimpleTable::ColCompare(pLeft,pRight); 286 } 287 288 } 289 290 return eCompare; 291 } 292 void SvxRedlinTable::SetCalcView(sal_Bool bFlag) 293 { 294 bIsCalc=bFlag; 295 if(bFlag) 296 { 297 nDatePos=CALC_DATE; 298 } 299 else 300 { 301 nDatePos=WRITER_DATE; 302 } 303 } 304 305 306 void SvxRedlinTable::UpdateFilterTest() 307 { 308 Date aDateMax; 309 sal_uInt16 nYEAR=aDateMax.GetYear()+100; 310 aDateMax.SetYear(nYEAR); 311 Date aDateMin(1,1,1989); 312 Time aTMin(0); 313 Time aTMax(23,59,59); 314 315 316 DateTime aDTMin(aDateMin); 317 DateTime aDTMax(aDateMax); 318 319 switch(nDaTiMode) 320 { 321 case FLT_DATE_BEFORE: 322 aDaTiFilterFirst=aDTMin; 323 aDaTiFilterLast=aDaTiFirst; 324 break; 325 case FLT_DATE_SAVE: 326 case FLT_DATE_SINCE: 327 aDaTiFilterFirst=aDaTiFirst; 328 aDaTiFilterLast=aDTMax; 329 break; 330 case FLT_DATE_EQUAL: 331 aDaTiFilterFirst=aDaTiFirst; 332 aDaTiFilterLast=aDaTiFirst; 333 aDaTiFilterFirst.SetTime(aTMin.GetTime()); 334 aDaTiFilterLast.SetTime(aTMax.GetTime()); 335 break; 336 case FLT_DATE_NOTEQUAL: 337 aDaTiFilterFirst=aDaTiFirst; 338 aDaTiFilterLast=aDaTiFirst; 339 aDaTiFilterFirst.SetTime(aTMin.GetTime()); 340 aDaTiFilterLast.SetTime(aTMax.GetTime()); 341 break; 342 case FLT_DATE_BETWEEN: 343 aDaTiFilterFirst=aDaTiFirst; 344 aDaTiFilterLast=aDaTiLast; 345 break; 346 } 347 } 348 349 350 void SvxRedlinTable::SetFilterDate(sal_Bool bFlag) 351 { 352 bDate=bFlag; 353 } 354 355 void SvxRedlinTable::SetDateTimeMode(sal_uInt16 nMode) 356 { 357 nDaTiMode=nMode; 358 } 359 360 void SvxRedlinTable::SetFirstDate(const Date& aDate) 361 { 362 aDaTiFirst.SetDate(aDate.GetDate()); 363 } 364 365 void SvxRedlinTable::SetLastDate(const Date& aDate) 366 { 367 aDaTiLast.SetDate(aDate.GetDate()); 368 } 369 370 void SvxRedlinTable::SetFirstTime(const Time& aTime) 371 { 372 aDaTiFirst.SetTime(aTime.GetTime()); 373 } 374 375 void SvxRedlinTable::SetLastTime(const Time& aTime) 376 { 377 aDaTiLast.SetTime(aTime.GetTime()); 378 } 379 380 void SvxRedlinTable::SetFilterAuthor(sal_Bool bFlag) 381 { 382 bAuthor=bFlag; 383 } 384 385 void SvxRedlinTable::SetAuthor(const String &aString) 386 { 387 aAuthor=aString; 388 } 389 390 void SvxRedlinTable::SetFilterComment(sal_Bool bFlag) 391 { 392 bComment=bFlag; 393 } 394 395 void SvxRedlinTable::SetCommentParams( const utl::SearchParam* pSearchPara ) 396 { 397 if(pSearchPara!=NULL) 398 { 399 if(pCommentSearcher!=NULL) delete pCommentSearcher; 400 401 pCommentSearcher=new utl::TextSearch(*pSearchPara, LANGUAGE_SYSTEM ); 402 } 403 } 404 405 sal_Bool SvxRedlinTable::IsValidWriterEntry(const String& rString,RedlinData *pUserData) 406 { 407 sal_Bool nTheFlag=sal_True; 408 String aString=rString.GetToken(WRITER_AUTHOR,'\t'); 409 if(pUserData==NULL) 410 { 411 if(bAuthor) 412 { 413 if(aAuthor.CompareTo(aString)==COMPARE_EQUAL) 414 nTheFlag=sal_True; 415 else 416 nTheFlag=sal_False; 417 } 418 } 419 else 420 { 421 DateTime aDateTime=pUserData->aDateTime; 422 nTheFlag=IsValidEntry(&aString,&aDateTime); 423 } 424 return nTheFlag; 425 } 426 427 sal_Bool SvxRedlinTable::IsValidCalcEntry(const String& rString,RedlinData *pUserData) 428 { 429 sal_Bool nTheFlag=sal_True; 430 String aString=rString.GetToken(CALC_AUTHOR,'\t'); 431 if(pUserData==NULL) 432 { 433 if(bAuthor) 434 { 435 if(aAuthor.CompareTo(aString)==COMPARE_EQUAL) 436 nTheFlag=sal_True; 437 else 438 nTheFlag=sal_False; 439 } 440 } 441 else 442 { 443 DateTime aDateTime=pUserData->aDateTime; 444 nTheFlag=IsValidEntry(&aString,&aDateTime); 445 } 446 return nTheFlag; 447 } 448 449 sal_Bool SvxRedlinTable::IsValidEntry(const String* pAuthorStr, 450 const DateTime *pDateTime,const String* pCommentStr) 451 { 452 bool nTheFlag=true; 453 if(bAuthor) 454 { 455 nTheFlag = aAuthor.CompareTo(*pAuthorStr)==COMPARE_EQUAL; 456 } 457 if(bDate && nTheFlag) 458 { 459 if(nDaTiMode!=FLT_DATE_NOTEQUAL) 460 { 461 nTheFlag=pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast); 462 } 463 else 464 { 465 nTheFlag=!(pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast)); 466 } 467 } 468 if(bComment && nTheFlag) 469 { 470 xub_StrLen nStartPos = 0; 471 xub_StrLen nEndPos = pCommentStr->Len(); 472 473 nTheFlag=pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos); 474 } 475 return nTheFlag; 476 } 477 478 sal_Bool SvxRedlinTable::IsValidEntry(const String* pAuthorStr,const DateTime *pDateTime) 479 { 480 sal_Bool nTheFlag=sal_True; 481 if(bAuthor) 482 { 483 if(aAuthor.CompareTo(*pAuthorStr)==COMPARE_EQUAL) 484 nTheFlag=sal_True; 485 else 486 nTheFlag=sal_False; 487 } 488 if(bDate && nTheFlag) 489 { 490 if(nDaTiMode!=FLT_DATE_NOTEQUAL) 491 { 492 nTheFlag=pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast); 493 } 494 else 495 { 496 nTheFlag=!(pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast)); 497 } 498 } 499 return nTheFlag; 500 } 501 502 sal_Bool SvxRedlinTable::IsValidComment(const String* pCommentStr) 503 { 504 bool nTheFlag=true; 505 506 if(bComment) 507 { 508 xub_StrLen nStartPos = 0; 509 xub_StrLen nEndPos = pCommentStr->Len(); 510 511 nTheFlag=pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos); 512 } 513 return nTheFlag; 514 } 515 516 SvLBoxEntry* SvxRedlinTable::InsertEntry(const String& rStr,RedlinData *pUserData, 517 SvLBoxEntry* pParent,sal_uIntPtr nPos) 518 { 519 aEntryColor=GetTextColor(); 520 if(pUserData!=NULL) 521 { 522 if(pUserData->bDisabled) 523 aEntryColor=Color(COL_GRAY); 524 } 525 526 XubString aStr= rStr; 527 528 XubString aFirstStr( aStr ); 529 xub_StrLen nEnd = aFirstStr.Search( sal_Unicode( '\t' ) ); 530 if( nEnd != STRING_NOTFOUND ) 531 { 532 aFirstStr.Erase( nEnd ); 533 aCurEntry = aStr; 534 aCurEntry.Erase( 0, ++nEnd ); 535 } 536 else 537 aCurEntry.Erase(); 538 539 return SvTreeListBox::InsertEntry( aFirstStr, pParent, sal_False, nPos, pUserData ); 540 541 } 542 543 SvLBoxEntry* SvxRedlinTable::InsertEntry(const String& rStr,RedlinData *pUserData,const Color& aColor, 544 SvLBoxEntry* pParent,sal_uIntPtr nPos) 545 { 546 aEntryColor=aColor; 547 548 XubString aStr= rStr; 549 550 XubString aFirstStr( aStr ); 551 xub_StrLen nEnd = aFirstStr.Search( sal_Unicode ( '\t' ) ); 552 if( nEnd != STRING_NOTFOUND ) 553 { 554 aFirstStr.Erase( nEnd ); 555 aCurEntry = aStr; 556 aCurEntry.Erase( 0, ++nEnd ); 557 } 558 else 559 aCurEntry.Erase(); 560 561 return SvTreeListBox::InsertEntry( aFirstStr, pParent, sal_False, nPos, pUserData ); 562 } 563 564 SvLBoxEntry* SvxRedlinTable::CreateEntry() const 565 { 566 return new SvxRedlinEntry; 567 } 568 569 void SvxRedlinTable::InitEntry( SvLBoxEntry* pEntry, const XubString& rStr, 570 const Image& rColl, const Image& rExp, SvLBoxButtonKind eButtonKind ) 571 { 572 SvLBoxButton* pButton; 573 SvLBoxString* pString; 574 SvLBoxContextBmp* pContextBmp; 575 576 if( nTreeFlags & TREEFLAG_CHKBTN ) 577 { 578 pButton= new SvLBoxButton( pEntry,eButtonKind,0,pCheckButtonData ); 579 pEntry->AddItem( pButton ); 580 } 581 582 pContextBmp= new SvLBoxContextBmp( pEntry,0, rColl,rExp, 583 SVLISTENTRYFLAG_EXPANDED); 584 pEntry->AddItem( pContextBmp ); 585 586 pString = new SvLBoxColorString( pEntry, 0, rStr ,aEntryColor); 587 pEntry->AddItem( pString ); 588 589 XubString aToken; 590 591 xub_Unicode* pCurToken = (xub_Unicode*)aCurEntry.GetBuffer(); 592 sal_uInt16 nCurTokenLen; 593 xub_Unicode* pNextToken = (xub_Unicode*)GetToken( pCurToken, nCurTokenLen ); 594 sal_uInt16 nCount = TabCount(); nCount--; 595 596 for( sal_uInt16 nToken = 0; nToken < nCount; nToken++ ) 597 { 598 if( pCurToken && nCurTokenLen ) 599 // aToken.Assign( pCurToken, nCurTokenLen ); 600 aToken = XubString( pCurToken, nCurTokenLen ); 601 else 602 aToken.Erase(); 603 604 SvLBoxColorString* pStr = new SvLBoxColorString( pEntry, 0, aToken ,aEntryColor); 605 pEntry->AddItem( pStr ); 606 607 pCurToken = pNextToken; 608 if( pCurToken ) 609 pNextToken = (xub_Unicode*)GetToken( pCurToken, nCurTokenLen ); 610 else 611 nCurTokenLen = 0; 612 } 613 } 614 615 616 617 618 //============================================================================ 619 // class SvxTPView 620 //---------------------------------------------------------------------------- 621 622 SvxTPView::SvxTPView( Window * pParent) 623 : TabPage( pParent, SVX_RES(SID_REDLIN_VIEW_PAGE)), 624 aViewData ( this, SVX_RES( DG_VIEW) ), 625 PbAccept ( this, SVX_RES(PB_ACCEPT ) ), 626 PbReject ( this, SVX_RES(PB_REJECT ) ), 627 PbAcceptAll ( this, SVX_RES(PB_ACCEPTALL ) ), 628 PbRejectAll ( this, SVX_RES(PB_REJECTALL ) ), 629 PbUndo ( this, SVX_RES(PB_UNDO ) ), 630 aTitle1 ( SVX_RES( STR_TITLE1 ) ), // lokale Resource 631 aTitle2 ( SVX_RES( STR_TITLE2 ) ), 632 aTitle3 ( SVX_RES( STR_TITLE3 ) ), 633 aTitle4 ( SVX_RES( STR_TITLE4 ) ), 634 aTitle5 ( SVX_RES( STR_TITLE5 ) ), 635 aStrMyName ( SVX_RES( STR_VIEW) ) 636 { 637 aViewData.SetAccessibleName(String(SVX_RES(STR_TREE))); 638 FreeResource(); 639 640 aViewData.SetHelpId(HID_REDLINING_VIEW_DG_VIEW_TABLE); 641 aViewData.SetHeaderBarHelpId(HID_REDLINING_VIEW_DG_VIEW_HEADER); 642 643 aMinSize=GetSizePixel(); 644 645 Link aLink=LINK( this, SvxTPView, PbClickHdl); 646 647 PbAccept.SetClickHdl(aLink); 648 PbAcceptAll.SetClickHdl(aLink); 649 PbReject.SetClickHdl(aLink); 650 PbRejectAll.SetClickHdl(aLink); 651 PbUndo.SetClickHdl(aLink); 652 653 nDistance=PbAccept.GetSizePixel().Height()+2*MIN_DISTANCE; 654 aViewData.SetTabs(nStaticTabs); 655 } 656 657 String SvxTPView::GetMyName() const 658 { 659 return aStrMyName; 660 } 661 662 void SvxTPView::Resize() 663 { 664 Size aSize=GetOutputSizePixel(); 665 Point aPos=aViewData.GetPosPixel(); 666 aSize.Height()-=aPos.Y()+nDistance; 667 aSize.Width()-=2*aPos.X(); 668 669 long newY=aPos.Y()+aSize.Height()+MIN_DISTANCE; 670 aPos=PbAccept.GetPosPixel(); 671 aPos.Y()=newY; 672 PbAccept.SetPosPixel(aPos); 673 aPos=PbAcceptAll.GetPosPixel(); 674 aPos.Y()=newY; 675 PbAcceptAll.SetPosPixel(aPos); 676 aPos=PbReject.GetPosPixel(); 677 aPos.Y()=newY; 678 PbReject.SetPosPixel(aPos); 679 aPos=PbRejectAll.GetPosPixel(); 680 aPos.Y()=newY; 681 PbRejectAll.SetPosPixel(aPos); 682 683 if(PbUndo.IsVisible()) 684 { 685 aPos=PbUndo.GetPosPixel(); 686 aPos.Y()=newY; 687 PbUndo.SetPosPixel(aPos); 688 } 689 aViewData.SetSizePixel(aSize); 690 } 691 692 void SvxTPView::InsertWriterHeader() 693 { 694 String aStrTab(sal_Unicode('\t')); 695 String aString(aTitle1); 696 aString+=aStrTab; 697 aString+=aTitle3; 698 aString+=aStrTab; 699 aString+=aTitle4; 700 aString+=aStrTab; 701 aString+=aTitle5; 702 aViewData.ClearHeader(); 703 aViewData.InsertHeaderEntry(aString); 704 } 705 706 void SvxTPView::InsertCalcHeader() 707 { 708 String aStrTab(sal_Unicode('\t')); 709 String aString(aTitle1); 710 aString+=aStrTab; 711 aString+=aTitle2; 712 aString+=aStrTab; 713 aString+=aTitle3; 714 aString+=aStrTab; 715 aString+=aTitle4; 716 aString+=aStrTab; 717 aString+=aTitle5; 718 aViewData.ClearHeader(); 719 aViewData.InsertHeaderEntry(aString); 720 } 721 722 void SvxTPView::EnableAccept(sal_Bool nFlag) 723 { 724 PbAccept.Enable(nFlag); 725 } 726 727 void SvxTPView::EnableAcceptAll(sal_Bool nFlag) 728 { 729 PbAcceptAll.Enable(nFlag); 730 } 731 732 void SvxTPView::EnableReject(sal_Bool nFlag) 733 { 734 PbReject.Enable(nFlag); 735 } 736 737 void SvxTPView::EnableRejectAll(sal_Bool nFlag) 738 { 739 PbRejectAll.Enable(nFlag); 740 } 741 742 void SvxTPView::ShowUndo(sal_Bool nFlag) 743 { 744 PbUndo.Show(nFlag); 745 } 746 747 void SvxTPView::EnableUndo(sal_Bool nFlag) 748 { 749 PbUndo.Enable(nFlag); 750 } 751 752 Size SvxTPView::GetMinSizePixel() 753 { 754 Size aSize=aMinSize; 755 if(PbUndo.IsVisible()) 756 { 757 sal_uIntPtr nSize=PbUndo.GetSizePixel().Width() 758 +PbUndo.GetPosPixel().X() 759 +PbAccept.GetPosPixel().X(); 760 761 aSize.Width()=nSize; 762 } 763 764 return aSize; 765 } 766 767 768 SvxRedlinTable* SvxTPView::GetTableControl() 769 { 770 return &aViewData; 771 } 772 773 IMPL_LINK( SvxTPView, PbClickHdl, PushButton*, pPushB ) 774 { 775 if(pPushB==&PbAccept) 776 { 777 AcceptClickLk.Call(this); 778 } 779 else if(pPushB==&PbAcceptAll) 780 { 781 AcceptAllClickLk.Call(this); 782 } 783 else if(pPushB==&PbReject) 784 { 785 RejectClickLk.Call(this); 786 } 787 else if(pPushB==&PbRejectAll) 788 { 789 RejectAllClickLk.Call(this); 790 } 791 else if(pPushB==&PbUndo) 792 { 793 UndoClickLk.Call(this); 794 } 795 796 return 0; 797 } 798 799 800 801 802 //============================================================================ 803 // class SvxTPFilter 804 //---------------------------------------------------------------------------- 805 806 SvxTPFilter::SvxTPFilter( Window * pParent) 807 : TabPage( pParent, SVX_RES(SID_REDLIN_FILTER_PAGE)), 808 pRedlinTable(NULL), 809 aCbDate ( this, SVX_RES( CB_DATE ) ), 810 aLbDate ( this, SVX_RES( LB_DATE ) ), 811 aDfDate ( this, SVX_RES( DF_DATE ) ), 812 aTfDate ( this, SVX_RES( TF_DATE ) ), 813 aIbClock ( this, SVX_RES( IB_CLOCK ) ), 814 aFtDate2 ( this, SVX_RES( FT_DATE2 ) ), 815 aDfDate2 ( this, SVX_RES( DF_DATE2 ) ), 816 aTfDate2 ( this, SVX_RES( TF_DATE2 ) ), 817 aIbClock2 ( this, SVX_RES( IB_CLOCK2) ), 818 aCbAuthor ( this, SVX_RES( CB_AUTOR ) ), 819 aLbAuthor ( this, SVX_RES( LB_AUTOR ) ), 820 aCbRange ( this, SVX_RES( CB_RANGE ) ), 821 aEdRange ( this, SVX_RES( ED_RANGE ) ), 822 aBtnRange ( this, SVX_RES( BTN_REF ) ), 823 aLbAction ( this, SVX_RES( LB_ACTION ) ), 824 aCbComment ( this, SVX_RES( CB_COMMENT) ), 825 aEdComment ( this, SVX_RES( ED_COMMENT) ), 826 aActionStr ( SVX_RES( STR_ACTION) ), 827 aStrMyName ( SVX_RES( STR_FILTER) ), 828 bModified (sal_False) 829 { 830 aLbDate.SetAccessibleName( String( SVX_RES( STR_DATE_COMBOX) ) ); 831 aDfDate.SetAccessibleName( String( SVX_RES( STR_DATE_SPIN) ) ); 832 aTfDate.SetAccessibleName( String( SVX_RES( STR_DATE_TIME_SPIN) ) ); 833 aDfDate2.SetAccessibleName( String( SVX_RES( STR_DATE_SPIN1) ) ); 834 aTfDate2.SetAccessibleName( String( SVX_RES( STR_DATE_TIME_SPIN1) ) ); 835 aLbAuthor.SetAccessibleName(aCbAuthor.GetText()); 836 aLbAction.SetAccessibleName( String( SVX_RES( STR_ACTION) ) ); 837 aEdComment.SetAccessibleName(aCbComment.GetText()); 838 Image aImgTimeHC( SVX_RES( IMG_TIME_H ) ); 839 FreeResource(); 840 841 aIbClock.SetModeImage( aImgTimeHC, BMP_COLOR_HIGHCONTRAST ); 842 aIbClock2.SetModeImage( aImgTimeHC, BMP_COLOR_HIGHCONTRAST ); 843 844 aDfDate.SetShowDateCentury( sal_True ); 845 aDfDate2.SetShowDateCentury( sal_True ); 846 847 aRangeStr=aCbRange.GetText(); 848 aLbDate.SelectEntryPos(0); 849 aLbDate.SetSelectHdl( LINK( this, SvxTPFilter, SelDateHdl ) ); 850 aIbClock.SetClickHdl( LINK( this, SvxTPFilter, TimeHdl) ); 851 aIbClock2.SetClickHdl( LINK( this, SvxTPFilter,TimeHdl) ); 852 aBtnRange.SetClickHdl( LINK( this, SvxTPFilter, RefHandle)); 853 854 Link aLink=LINK( this, SvxTPFilter, RowEnableHdl) ; 855 aCbDate.SetClickHdl(aLink); 856 aCbAuthor.SetClickHdl(aLink); 857 aCbRange.SetClickHdl(aLink); 858 aCbComment.SetClickHdl(aLink); 859 860 Link a2Link=LINK( this, SvxTPFilter, ModifyDate); 861 aDfDate.SetModifyHdl(a2Link); 862 aTfDate.SetModifyHdl(a2Link); 863 aDfDate2.SetModifyHdl(a2Link); 864 aTfDate2.SetModifyHdl(a2Link); 865 866 Link a3Link=LINK( this, SvxTPFilter, ModifyHdl); 867 aEdRange.SetModifyHdl(a3Link); 868 aEdComment.SetModifyHdl(a3Link); 869 aLbAction.SetSelectHdl(a3Link); 870 aLbAuthor.SetSelectHdl(a3Link); 871 872 RowEnableHdl(&aCbDate); 873 RowEnableHdl(&aCbAuthor); 874 RowEnableHdl(&aCbRange); 875 RowEnableHdl(&aCbComment); 876 877 Date aDate; 878 Time aTime; 879 aDfDate.SetDate(aDate); 880 aTfDate.SetTime(aTime); 881 aDfDate2.SetDate(aDate); 882 aTfDate2.SetTime(aTime); 883 HideRange(); 884 ShowAction(); 885 bModified=sal_False; 886 887 aLbDate.SetAccessibleRelationLabeledBy(&aCbDate); 888 aLbAuthor.SetAccessibleRelationLabeledBy(&aCbAuthor); 889 aLbAction.SetAccessibleRelationLabeledBy(&aCbRange); 890 aEdRange.SetAccessibleRelationLabeledBy(&aCbRange); 891 aBtnRange.SetAccessibleRelationLabeledBy(&aCbRange); 892 aEdComment.SetAccessibleRelationLabeledBy(&aCbComment); 893 aDfDate2.SetAccessibleRelationLabeledBy(&aDfDate2); 894 aTfDate2.SetAccessibleRelationLabeledBy(&aTfDate2); 895 } 896 897 void SvxTPFilter::SetRedlinTable(SvxRedlinTable* pTable) 898 { 899 pRedlinTable=pTable; 900 } 901 902 String SvxTPFilter::GetMyName() const 903 { 904 return aStrMyName; 905 } 906 907 void SvxTPFilter::DisableRange(sal_Bool bFlag) 908 { 909 if(bFlag) 910 { 911 aCbRange.Disable(); 912 aEdRange.Disable(); 913 aBtnRange.Disable(); 914 } 915 else 916 { 917 aCbRange.Enable(); 918 aEdRange.Enable(); 919 aBtnRange.Enable(); 920 } 921 } 922 923 void SvxTPFilter::ShowDateFields(sal_uInt16 nKind) 924 { 925 String aEmpty; 926 switch(nKind) 927 { 928 case FLT_DATE_BEFORE: 929 EnableDateLine1(sal_True); 930 EnableDateLine2(sal_False); 931 break; 932 case FLT_DATE_SINCE: 933 EnableDateLine1(sal_True); 934 EnableDateLine2(sal_False); 935 break; 936 case FLT_DATE_EQUAL: 937 EnableDateLine1(sal_True); 938 aTfDate.Disable(); 939 aTfDate.SetText(aEmpty); 940 EnableDateLine2(sal_False); 941 break; 942 case FLT_DATE_NOTEQUAL: 943 EnableDateLine1(sal_True); 944 aTfDate.Disable(); 945 aTfDate.SetText(aEmpty); 946 EnableDateLine2(sal_False); 947 break; 948 case FLT_DATE_BETWEEN: 949 EnableDateLine1(sal_True); 950 EnableDateLine2(sal_True); 951 break; 952 case FLT_DATE_SAVE: 953 EnableDateLine1(sal_False); 954 EnableDateLine2(sal_False); 955 break; 956 } 957 } 958 959 void SvxTPFilter::EnableDateLine1(sal_Bool bFlag) 960 { 961 if(bFlag && aCbDate.IsChecked()) 962 { 963 aDfDate.Enable(); 964 aTfDate.Enable(); 965 aIbClock.Enable(); 966 } 967 else 968 { 969 aDfDate.Disable(); 970 aTfDate.Disable(); 971 aIbClock.Disable(); 972 } 973 } 974 void SvxTPFilter::EnableDateLine2(sal_Bool bFlag) 975 { 976 String aEmpty; 977 if(bFlag && aCbDate.IsChecked()) 978 { 979 aFtDate2.Enable(); 980 aDfDate2.Enable(); 981 aTfDate2.Enable(); 982 aIbClock2.Enable(); 983 } 984 else 985 { 986 aFtDate2.Disable(); 987 aDfDate2.Disable(); 988 aDfDate2.SetText(aEmpty); 989 aTfDate2.Disable(); 990 aTfDate2.SetText(aEmpty); 991 aIbClock2.Disable(); 992 } 993 } 994 995 Date SvxTPFilter::GetFirstDate() const 996 { 997 return aDfDate.GetDate(); 998 } 999 1000 void SvxTPFilter::SetFirstDate(const Date &aDate) 1001 { 1002 aDfDate.SetDate(aDate); 1003 } 1004 1005 Time SvxTPFilter::GetFirstTime() const 1006 { 1007 return aTfDate.GetTime(); 1008 } 1009 1010 void SvxTPFilter::SetFirstTime(const Time &aTime) 1011 { 1012 aTfDate.SetTime(aTime); 1013 } 1014 1015 1016 Date SvxTPFilter::GetLastDate() const 1017 { 1018 return aDfDate2.GetDate(); 1019 } 1020 1021 void SvxTPFilter::SetLastDate(const Date &aDate) 1022 { 1023 aDfDate2.SetDate(aDate); 1024 } 1025 1026 Time SvxTPFilter::GetLastTime() const 1027 { 1028 return aTfDate2.GetTime(); 1029 } 1030 1031 void SvxTPFilter::SetLastTime(const Time &aTime) 1032 { 1033 aTfDate2.SetTime(aTime); 1034 } 1035 1036 void SvxTPFilter::SetDateMode(sal_uInt16 nMode) 1037 { 1038 aLbDate.SelectEntryPos(nMode); 1039 SelDateHdl(&aLbDate); 1040 } 1041 1042 sal_uInt16 SvxTPFilter::GetDateMode() 1043 { 1044 return (sal_uInt16) aLbDate.GetSelectEntryPos(); 1045 } 1046 void SvxTPFilter::ClearAuthors() 1047 { 1048 aLbAuthor.Clear(); 1049 } 1050 1051 void SvxTPFilter::InsertAuthor( const String& rString, sal_uInt16 nPos) 1052 { 1053 aLbAuthor.InsertEntry(rString,nPos); 1054 } 1055 1056 String SvxTPFilter::GetSelectedAuthor() const 1057 { 1058 return aLbAuthor.GetSelectEntry(); 1059 } 1060 1061 sal_uInt16 SvxTPFilter::GetSelectedAuthorPos() 1062 { 1063 return (sal_uInt16) aLbAuthor.GetSelectEntryPos(); 1064 } 1065 1066 void SvxTPFilter::SelectedAuthorPos(sal_uInt16 nPos) 1067 { 1068 aLbAuthor.SelectEntryPos(nPos); 1069 } 1070 1071 sal_uInt16 SvxTPFilter::SelectAuthor(const String& aString) 1072 { 1073 aLbAuthor.SelectEntry(aString); 1074 return aLbAuthor.GetSelectEntryPos(); 1075 } 1076 1077 void SvxTPFilter::SetRange(const String& rString) 1078 { 1079 aEdRange.SetText(rString); 1080 } 1081 1082 String SvxTPFilter::GetRange() const 1083 { 1084 return aEdRange.GetText(); 1085 } 1086 1087 void SvxTPFilter::SetFocusToRange() 1088 { 1089 aEdRange.GrabFocus(); 1090 } 1091 1092 void SvxTPFilter::HideRange(sal_Bool bHide) 1093 { 1094 if(bHide) 1095 { 1096 aCbRange.Hide(); 1097 aEdRange.Hide(); 1098 aBtnRange.Hide(); 1099 } 1100 else 1101 { 1102 ShowAction(sal_False); 1103 aCbRange.SetText(aRangeStr); 1104 aCbRange.Show(); 1105 aEdRange.Show(); 1106 aBtnRange.Show(); 1107 } 1108 } 1109 1110 void SvxTPFilter::HideClocks(sal_Bool bHide) 1111 { 1112 if(bHide) 1113 { 1114 aIbClock. Hide(); 1115 aIbClock2.Hide(); 1116 } 1117 else 1118 { 1119 aIbClock. Show(); 1120 aIbClock2.Show(); 1121 } 1122 } 1123 1124 void SvxTPFilter::SetComment(const String &rComment) 1125 { 1126 aEdComment.SetText(rComment); 1127 } 1128 String SvxTPFilter::GetComment()const 1129 { 1130 return aEdComment.GetText(); 1131 } 1132 1133 sal_Bool SvxTPFilter::IsDate() 1134 { 1135 return aCbDate.IsChecked(); 1136 } 1137 1138 sal_Bool SvxTPFilter::IsAuthor() 1139 { 1140 return aCbAuthor.IsChecked(); 1141 } 1142 1143 sal_Bool SvxTPFilter::IsRange() 1144 { 1145 return aCbRange.IsChecked(); 1146 } 1147 sal_Bool SvxTPFilter::IsAction() 1148 { 1149 return aCbRange.IsChecked(); 1150 } 1151 1152 sal_Bool SvxTPFilter::IsComment() 1153 { 1154 return aCbComment.IsChecked(); 1155 } 1156 1157 void SvxTPFilter::CheckDate(sal_Bool bFlag) 1158 { 1159 aCbDate.Check(bFlag); 1160 RowEnableHdl(&aCbDate); 1161 bModified=sal_False; 1162 } 1163 1164 void SvxTPFilter::CheckAuthor(sal_Bool bFlag) 1165 { 1166 aCbAuthor.Check(bFlag); 1167 RowEnableHdl(&aCbAuthor); 1168 bModified=sal_False; 1169 } 1170 1171 void SvxTPFilter::CheckRange(sal_Bool bFlag) 1172 { 1173 aCbRange.Check(bFlag); 1174 RowEnableHdl(&aCbRange); 1175 bModified=sal_False; 1176 } 1177 1178 void SvxTPFilter::CheckAction(sal_Bool bFlag) 1179 { 1180 aCbRange.Check(bFlag); 1181 RowEnableHdl(&aCbRange); 1182 bModified=sal_False; 1183 } 1184 1185 void SvxTPFilter::CheckComment(sal_Bool bFlag) 1186 { 1187 aCbComment.Check(bFlag); 1188 RowEnableHdl(&aCbComment); 1189 bModified=sal_False; 1190 } 1191 1192 void SvxTPFilter::ShowAction(sal_Bool bShow) 1193 { 1194 if(!bShow) 1195 { 1196 aCbRange.Hide(); 1197 aLbAction.Hide(); 1198 aCbRange.SetHelpId(HID_REDLINING_FILTER_CB_RANGE); 1199 } 1200 else 1201 { 1202 HideRange(); 1203 aCbRange.SetText(aActionStr); 1204 aCbRange.SetHelpId(HID_REDLINING_FILTER_CB_ACTION); 1205 aCbRange.Show(); 1206 aLbAction.Show(); 1207 1208 } 1209 } 1210 1211 ListBox* SvxTPFilter::GetLbAction() 1212 { 1213 return &aLbAction; 1214 } 1215 1216 IMPL_LINK( SvxTPFilter, SelDateHdl, ListBox*, pLb ) 1217 { 1218 ShowDateFields((sal_uInt16)aLbDate.GetSelectEntryPos()); 1219 ModifyHdl(pLb); 1220 return 0; 1221 } 1222 1223 IMPL_LINK( SvxTPFilter, RowEnableHdl, CheckBox*, pCB ) 1224 { 1225 if(pCB==&aCbDate) 1226 { 1227 aLbDate.Enable(aCbDate.IsChecked()); 1228 aLbDate.Invalidate(); 1229 EnableDateLine1(sal_False); 1230 EnableDateLine2(sal_False); 1231 if(aCbDate.IsChecked()) SelDateHdl(&aLbDate); 1232 } 1233 else if(pCB==&aCbAuthor) 1234 { 1235 aLbAuthor.Enable(aCbAuthor.IsChecked()); 1236 aLbAuthor.Invalidate(); 1237 } 1238 else if(pCB==&aCbRange) 1239 { 1240 aLbAction.Enable(aCbRange.IsChecked()); 1241 aLbAction.Invalidate(); 1242 aEdRange.Enable(aCbRange.IsChecked()); 1243 aBtnRange.Enable(aCbRange.IsChecked()); 1244 } 1245 else if(pCB==&aCbComment) 1246 { 1247 aEdComment.Enable(aCbComment.IsChecked()); 1248 aEdComment.Invalidate(); 1249 } 1250 1251 ModifyHdl(pCB); 1252 return 0; 1253 } 1254 1255 IMPL_LINK( SvxTPFilter, TimeHdl, ImageButton*,pIB ) 1256 { 1257 Date aDate; 1258 Time aTime; 1259 if(pIB==&aIbClock) 1260 { 1261 aDfDate.SetDate(aDate); 1262 aTfDate.SetTime(aTime); 1263 } 1264 else if(pIB==&aIbClock2) 1265 { 1266 aDfDate2.SetDate(aDate); 1267 aTfDate2.SetTime(aTime); 1268 } 1269 ModifyHdl(&aDfDate); 1270 return 0; 1271 } 1272 1273 IMPL_LINK( SvxTPFilter, ModifyHdl, void*, pCtr) 1274 { 1275 if(pCtr!=NULL) 1276 { 1277 if(pCtr==&aCbDate || pCtr==&aLbDate || 1278 pCtr==&aDfDate || pCtr==&aTfDate || 1279 pCtr==&aIbClock || pCtr==&aFtDate2|| 1280 pCtr==&aDfDate2 || pCtr==&aTfDate2|| 1281 pCtr==&aIbClock2) 1282 { 1283 aModifyDateLink.Call(this); 1284 } 1285 else if(pCtr==&aCbAuthor || pCtr==&aLbAuthor) 1286 { 1287 aModifyAuthorLink.Call(this); 1288 } 1289 else if(pCtr==&aCbRange || pCtr==&aEdRange || 1290 pCtr==&aBtnRange ) 1291 { 1292 aModifyRefLink.Call(this); 1293 } 1294 else if(pCtr==&aCbComment || pCtr==&aEdComment) 1295 { 1296 aModifyComLink.Call(this); 1297 } 1298 1299 bModified=sal_True; 1300 aModifyLink.Call(this); 1301 } 1302 return 0; 1303 } 1304 1305 void SvxTPFilter::DeactivatePage() 1306 { 1307 if(bModified) 1308 { 1309 if(pRedlinTable!=NULL) 1310 { 1311 pRedlinTable->SetFilterDate(IsDate()); 1312 pRedlinTable->SetDateTimeMode(GetDateMode()); 1313 pRedlinTable->SetFirstDate(aDfDate.GetDate()); 1314 pRedlinTable->SetLastDate(aDfDate2.GetDate()); 1315 pRedlinTable->SetFirstTime(aTfDate.GetTime()); 1316 pRedlinTable->SetLastTime(aTfDate2.GetTime()); 1317 pRedlinTable->SetFilterAuthor(IsAuthor()); 1318 pRedlinTable->SetAuthor(GetSelectedAuthor()); 1319 1320 pRedlinTable->SetFilterComment(IsComment()); 1321 1322 utl::SearchParam aSearchParam( aEdComment.GetText(), 1323 utl::SearchParam::SRCH_REGEXP,sal_False,sal_False,sal_False ); 1324 1325 pRedlinTable->SetCommentParams(&aSearchParam); 1326 1327 pRedlinTable->UpdateFilterTest(); 1328 } 1329 1330 aReadyLink.Call(this); 1331 } 1332 bModified=sal_False; 1333 TabPage::DeactivatePage(); 1334 } 1335 1336 void SvxTPFilter::Enable( bool bEnable, bool bChild) 1337 { 1338 TabPage::Enable(bEnable,bChild); 1339 if(aCbDate.IsEnabled()) 1340 { 1341 RowEnableHdl(&aCbDate); 1342 RowEnableHdl(&aCbAuthor); 1343 RowEnableHdl(&aCbRange); 1344 RowEnableHdl(&aCbComment); 1345 } 1346 } 1347 void SvxTPFilter::Disable( bool bChild) 1348 { 1349 Enable( false, bChild ); 1350 } 1351 1352 IMPL_LINK( SvxTPFilter, ModifyDate, void*,pTF) 1353 { 1354 1355 Date aDate; 1356 Time aTime(0); 1357 if(&aDfDate==pTF) 1358 { 1359 if(aDfDate.GetText().Len()==0) 1360 aDfDate.SetDate(aDate); 1361 1362 if(pRedlinTable!=NULL) 1363 pRedlinTable->SetFirstDate(aDfDate.GetDate()); 1364 } 1365 else if(&aDfDate2==pTF) 1366 { 1367 if(aDfDate2.GetText().Len()==0) 1368 aDfDate2.SetDate(aDate); 1369 1370 if(pRedlinTable!=NULL) 1371 pRedlinTable->SetLastDate(aDfDate2.GetDate()); 1372 } 1373 else if(&aTfDate==pTF) 1374 { 1375 if(aTfDate.GetText().Len()==0) 1376 aTfDate.SetTime(aTime); 1377 1378 if(pRedlinTable!=NULL) 1379 pRedlinTable->SetFirstTime(aTfDate.GetTime()); 1380 } 1381 else if(&aTfDate2==pTF) 1382 { 1383 if(aTfDate2.GetText().Len()==0) 1384 aTfDate2.SetTime(aTime); 1385 1386 if(pRedlinTable!=NULL) 1387 pRedlinTable->SetLastTime(aTfDate2.GetTime()); 1388 1389 } 1390 ModifyHdl(&aDfDate); 1391 return 0; 1392 } 1393 1394 IMPL_LINK( SvxTPFilter, RefHandle, PushButton*, pRef ) 1395 { 1396 if(pRef!=NULL) 1397 { 1398 aRefLink.Call(this); 1399 } 1400 return 0; 1401 } 1402 1403 static Size gDiffSize; 1404 //============================================================================ 1405 // class SvxAcceptChgCtr 1406 //---------------------------------------------------------------------------- 1407 1408 SvxAcceptChgCtr::SvxAcceptChgCtr( Window* pParent, WinBits nWinStyle) 1409 : Control(pParent,nWinStyle |WB_DIALOGCONTROL), 1410 aTCAccept(this,WB_TABSTOP |WB_DIALOGCONTROL) 1411 { 1412 pTPFilter=new SvxTPFilter(&aTCAccept); 1413 pTPView=new SvxTPView(&aTCAccept); 1414 aMinSize=pTPView->GetMinSizePixel(); 1415 1416 aTCAccept.InsertPage( TP_VIEW, pTPView->GetMyName()); 1417 aTCAccept.InsertPage( TP_FILTER, pTPFilter->GetMyName()); 1418 aTCAccept.SetTabPage( TP_VIEW, pTPView); 1419 aTCAccept.SetTabPage( TP_FILTER, pTPFilter); 1420 aTCAccept.SetHelpId(HID_REDLINING_TABCONTROL); 1421 1422 aTCAccept.SetTabPageSizePixel(aMinSize); 1423 Size aSize=aTCAccept.GetSizePixel(); 1424 1425 gDiffSize.Height()=aSize.Height()-aMinSize.Height(); 1426 gDiffSize.Width()=aSize.Width()-aMinSize.Width(); 1427 1428 1429 pTPFilter->SetRedlinTable(GetViewTable()); 1430 1431 aTCAccept.Show(); 1432 ShowViewPage(); 1433 } 1434 1435 SvxAcceptChgCtr::SvxAcceptChgCtr( Window* pParent, const ResId& rResId ) 1436 : Control(pParent,rResId ), 1437 aTCAccept(this,WB_TABSTOP |WB_DIALOGCONTROL) 1438 { 1439 pTPFilter=new SvxTPFilter(&aTCAccept); 1440 pTPView=new SvxTPView(&aTCAccept); 1441 aMinSize=pTPView->GetMinSizePixel(); 1442 1443 aTCAccept.InsertPage( TP_VIEW, pTPView->GetMyName()); 1444 aTCAccept.InsertPage( TP_FILTER, pTPFilter->GetMyName()); 1445 aTCAccept.SetTabPage( TP_VIEW, pTPView); 1446 aTCAccept.SetTabPage( TP_FILTER, pTPFilter); 1447 aTCAccept.SetHelpId(HID_REDLINING_TABCONTROL); 1448 1449 aTCAccept.SetTabPageSizePixel(aMinSize); 1450 Size aSize=aTCAccept.GetSizePixel(); 1451 1452 gDiffSize.Height()=aSize.Height()-aMinSize.Height(); 1453 gDiffSize.Width()=aSize.Width()-aMinSize.Width(); 1454 1455 1456 pTPFilter->SetRedlinTable(GetViewTable()); 1457 WinBits nWinStyle=GetStyle()|WB_DIALOGCONTROL; 1458 SetStyle(nWinStyle); 1459 1460 aTCAccept.Show(); 1461 ShowViewPage(); 1462 Resize(); 1463 } 1464 1465 SvxAcceptChgCtr::~SvxAcceptChgCtr() 1466 { 1467 delete pTPView; 1468 delete pTPFilter; 1469 } 1470 1471 void SvxAcceptChgCtr::Resize() 1472 { 1473 aMinSize=pTPView->GetMinSizePixel(); 1474 Size aSize=GetOutputSizePixel(); 1475 sal_Bool bFlag=sal_False; 1476 1477 if(aMinSize.Height()>aSize.Height()) 1478 { 1479 aSize.Height()=aMinSize.Height(); 1480 bFlag=sal_True; 1481 } 1482 if(aMinSize.Width()>aSize.Width()) 1483 { 1484 aSize.Width()=aMinSize.Width(); 1485 bFlag=sal_True; 1486 } 1487 1488 if(bFlag) 1489 { 1490 SetOutputSizePixel(aSize); 1491 aMinSizeLink.Call(this); 1492 } 1493 1494 aSize.Height()-=2; 1495 aSize.Width()-=2; 1496 aTCAccept.SetSizePixel(aSize); 1497 } 1498 1499 Size SvxAcceptChgCtr::GetMinSizePixel() const 1500 { 1501 Size aSize=pTPView->GetMinSizePixel(); 1502 aSize.Height()+=gDiffSize.Height(); 1503 aSize.Width()+=gDiffSize.Width(); 1504 return aSize; 1505 } 1506 1507 void SvxAcceptChgCtr::ShowFilterPage() 1508 { 1509 aTCAccept.SetCurPageId(TP_FILTER); 1510 } 1511 1512 void SvxAcceptChgCtr::ShowViewPage() 1513 { 1514 aTCAccept.SetCurPageId(TP_VIEW); 1515 } 1516 1517 sal_Bool SvxAcceptChgCtr::IsFilterPageVisible() 1518 { 1519 return (aTCAccept.GetCurPageId()==TP_FILTER); 1520 } 1521 1522 sal_Bool SvxAcceptChgCtr::IsViewPageVisible() 1523 { 1524 return (aTCAccept.GetCurPageId()==TP_VIEW); 1525 } 1526 1527 SvxTPFilter* SvxAcceptChgCtr::GetFilterPage() 1528 { 1529 return pTPFilter; 1530 } 1531 1532 SvxTPView* SvxAcceptChgCtr::GetViewPage() 1533 { 1534 return pTPView; 1535 } 1536 1537 SvxRedlinTable* SvxAcceptChgCtr::GetViewTable() 1538 { 1539 if(pTPView!=NULL) 1540 { 1541 return pTPView->GetTableControl(); 1542 } 1543 else 1544 { 1545 return NULL; 1546 } 1547 } 1548 1549 1550