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