xref: /trunk/main/svx/source/dialog/ctredlin.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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