blob: 3241bda1d76e1420e84e3658efbe86bea420bfd5 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
// System - Includes ---------------------------------------------------------
#include <vcl/svapp.hxx>
#include <tools/shl.hxx>
#include <sfx2/app.hxx>
#include <sfx2/module.hxx>
#include <svtools/txtcmp.hxx>
#include <unotools/charclass.hxx>
// INCLUDE -------------------------------------------------------------------
#include <editeng/unolingu.hxx>
#include <svx/dialmgr.hxx>
#include "ctredlin.hrc"
#include <svx/ctredlin.hxx>
#include "helpid.hrc"
//============================================================================
// Local Defines and Function
//----------------------------------------------------------------------------
inline void EnableDisable( Window& rWin, sal_Bool bEnable )
{
if (bEnable)
rWin.Enable();
else
rWin.Disable();
}
static long nStaticTabs[]=
{
5,10,65,120,170,220
};
#define MIN_DISTANCE 6
#define WRITER_AUTHOR 1
#define WRITER_DATE 2
#define CALC_AUTHOR 2
#define CALC_DATE 3
RedlinData::RedlinData()
{
bDisabled=sal_False;
pData=NULL;
}
RedlinData::~RedlinData()
{
}
//============================================================================
// class SvxRedlinEntry (Eintraege fuer Liste)
//----------------------------------------------------------------------------
SvxRedlinEntry::SvxRedlinEntry()
:SvLBoxEntry()
{
}
SvxRedlinEntry::~SvxRedlinEntry()
{
RedlinData* pRedDat=(RedlinData*) GetUserData();
if(pRedDat!=NULL)
{
delete pRedDat;
}
}
/*************************************************************************
#* Funktionen der in den SvxRedlinTable eingefuegten Items
#************************************************************************/
DBG_NAME(SvLBoxColorString);
/*************************************************************************
#* Member: SvLBoxColorString Datum:23.10.97
#*------------------------------------------------------------------------
#*
#* Klasse: SvLBoxColorString
#*
#* Funktion: Konstruktor der Klasse SvLBoxColorString
#*
#* Input: Box- Entry,Flags, Text fuer Anzeige, Schrift
#*
#* Output: ---
#*
#************************************************************************/
SvLBoxColorString::SvLBoxColorString( SvLBoxEntry*pEntry,sal_uInt16 nFlags,const XubString& rStr,
const Color& rCol)
: SvLBoxString( pEntry, nFlags, rStr )
{
DBG_CTOR(SvLBoxColorString,0);
aPrivColor=rCol;
SetText( pEntry, rStr );
}
/*************************************************************************
#* Member: SvLBoxColorString Datum:23.10.97
#*------------------------------------------------------------------------
#*
#* Klasse: SvLBoxColorString
#*
#* Funktion: Default Konstruktor der Klasse SvLBoxColorString
#*
#* Input: ---
#*
#* Output: ---
#*
#************************************************************************/
SvLBoxColorString::SvLBoxColorString()
: SvLBoxString()
{
DBG_CTOR(SvLBoxColorString,0);
}
/*************************************************************************
#* Member: ~SvLBoxColorString Datum:23.10.97
#*------------------------------------------------------------------------
#*
#* Klasse: SvLBoxColorString
#*
#* Funktion: Destruktor der Klasse SvLBoxColorString
#*
#* Input: ---
#*
#* Output: ---
#*
#************************************************************************/
SvLBoxColorString::~SvLBoxColorString()
{
DBG_DTOR(SvLBoxColorString,0);
}
/*************************************************************************
#* Member: SvLBoxColorString Datum:23.10.97
#*------------------------------------------------------------------------
#*
#* Klasse: SvLBoxColorString
#*
#* Funktion: Erzeugt einen neuen SvLBoxColorString
#*
#* Input: ---
#*
#* Output: SvLBoxColorString
#*
#************************************************************************/
SvLBoxItem* SvLBoxColorString::Create() const
{
DBG_CHKTHIS(SvLBoxColorString,0);
return new SvLBoxColorString;
}
/*************************************************************************
#* Member: SvLBoxColorString Datum:23.10.97
#*------------------------------------------------------------------------
#*
#* Klasse: SvLBoxColorString
#*
#* Funktion: Zeichenroutine des SvLBoxColorString. Gezeichnet wird
#* der entsprechende Text mit der eingestellten Farbe
#* im Ausgabe- Device.
#*
#* Input: Position, Ausgabe- Device, Flag fuer Selection,
#* Zeiger auf den Eintrag
#*
#* Output: ---
#*
#************************************************************************/
void SvLBoxColorString::Paint( const Point& rPos, SvLBox& rDev,
sal_uInt16 nFlags, SvLBoxEntry* pEntry )
{
Color aColor=rDev.GetTextColor();
Color a2Color=aColor;
if(!(nFlags & SVLISTENTRYFLAG_SELECTED))
{
rDev.SetTextColor(aPrivColor);
}
SvLBoxString::Paint(rPos,rDev,nFlags,pEntry );
rDev.SetTextColor(a2Color);
}
//============================================================================
// class SvxRedlinTable
//----------------------------------------------------------------------------
SvxRedlinTable::SvxRedlinTable( Window* pParent,WinBits nBits ):
SvxSimpleTable(pParent,nBits )
{
bAuthor=sal_False;
bDate=sal_False;
bIsCalc=sal_False;
bComment=sal_False;
nDatePos=WRITER_DATE;
pCommentSearcher=NULL;
SetNodeDefaultImages();
}
SvxRedlinTable::SvxRedlinTable( Window* pParent,const ResId& rResId):
SvxSimpleTable(pParent,rResId)
{
bAuthor=sal_False;
bDate=sal_False;
bIsCalc=sal_False;
bComment=sal_False;
nDatePos=WRITER_DATE;
pCommentSearcher=NULL;
SetNodeDefaultImages();
}
SvxRedlinTable::~SvxRedlinTable()
{
if(pCommentSearcher!=NULL)
delete pCommentSearcher;
}
StringCompare SvxRedlinTable::ColCompare(SvLBoxEntry* pLeft,SvLBoxEntry* pRight)
{
StringCompare eCompare=COMPARE_EQUAL;
if(aColCompareLink.IsSet())
{
SvSortData aRedlinCompare;
aRedlinCompare.pLeft=pLeft;
aRedlinCompare.pRight=pRight;
eCompare=(StringCompare) aColCompareLink.Call(&aRedlinCompare);
}
else
{
if(nDatePos==GetSortedCol())
{
RedlinData *pLeftData=(RedlinData *)(pLeft->GetUserData());
RedlinData *pRightData=(RedlinData *)(pRight->GetUserData());
if(pLeftData!=NULL && pRightData!=NULL)
{
if(pLeftData->aDateTime < pRightData->aDateTime)
{
eCompare=COMPARE_LESS;
}
else if(pLeftData->aDateTime > pRightData->aDateTime)
{
eCompare=COMPARE_GREATER;
}
}
else
eCompare=SvxSimpleTable::ColCompare(pLeft,pRight);
}
else
{
eCompare=SvxSimpleTable::ColCompare(pLeft,pRight);
}
}
return eCompare;
}
void SvxRedlinTable::SetCalcView(sal_Bool bFlag)
{
bIsCalc=bFlag;
if(bFlag)
{
nDatePos=CALC_DATE;
}
else
{
nDatePos=WRITER_DATE;
}
}
void SvxRedlinTable::UpdateFilterTest()
{
Date aDateMax;
sal_uInt16 nYEAR=aDateMax.GetYear()+100;
aDateMax.SetYear(nYEAR);
Date aDateMin(1,1,1989);
Time aTMin(0);
Time aTMax(23,59,59);
DateTime aDTMin(aDateMin);
DateTime aDTMax(aDateMax);
switch(nDaTiMode)
{
case FLT_DATE_BEFORE:
aDaTiFilterFirst=aDTMin;
aDaTiFilterLast=aDaTiFirst;
break;
case FLT_DATE_SAVE:
case FLT_DATE_SINCE:
aDaTiFilterFirst=aDaTiFirst;
aDaTiFilterLast=aDTMax;
break;
case FLT_DATE_EQUAL:
aDaTiFilterFirst=aDaTiFirst;
aDaTiFilterLast=aDaTiFirst;
aDaTiFilterFirst.SetTime(aTMin.GetTime());
aDaTiFilterLast.SetTime(aTMax.GetTime());
break;
case FLT_DATE_NOTEQUAL:
aDaTiFilterFirst=aDaTiFirst;
aDaTiFilterLast=aDaTiFirst;
aDaTiFilterFirst.SetTime(aTMin.GetTime());
aDaTiFilterLast.SetTime(aTMax.GetTime());
break;
case FLT_DATE_BETWEEN:
aDaTiFilterFirst=aDaTiFirst;
aDaTiFilterLast=aDaTiLast;
break;
}
}
void SvxRedlinTable::SetFilterDate(sal_Bool bFlag)
{
bDate=bFlag;
}
void SvxRedlinTable::SetDateTimeMode(sal_uInt16 nMode)
{
nDaTiMode=nMode;
}
void SvxRedlinTable::SetFirstDate(const Date& aDate)
{
aDaTiFirst.SetDate(aDate.GetDate());
}
void SvxRedlinTable::SetLastDate(const Date& aDate)
{
aDaTiLast.SetDate(aDate.GetDate());
}
void SvxRedlinTable::SetFirstTime(const Time& aTime)
{
aDaTiFirst.SetTime(aTime.GetTime());
}
void SvxRedlinTable::SetLastTime(const Time& aTime)
{
aDaTiLast.SetTime(aTime.GetTime());
}
void SvxRedlinTable::SetFilterAuthor(sal_Bool bFlag)
{
bAuthor=bFlag;
}
void SvxRedlinTable::SetAuthor(const String &aString)
{
aAuthor=aString;
}
void SvxRedlinTable::SetFilterComment(sal_Bool bFlag)
{
bComment=bFlag;
}
void SvxRedlinTable::SetCommentParams( const utl::SearchParam* pSearchPara )
{
if(pSearchPara!=NULL)
{
if(pCommentSearcher!=NULL) delete pCommentSearcher;
pCommentSearcher=new utl::TextSearch(*pSearchPara, LANGUAGE_SYSTEM );
}
}
sal_Bool SvxRedlinTable::IsValidWriterEntry(const String& rString,RedlinData *pUserData)
{
sal_Bool nTheFlag=sal_True;
String aString=rString.GetToken(WRITER_AUTHOR,'\t');
if(pUserData==NULL)
{
if(bAuthor)
{
if(aAuthor.CompareTo(aString)==COMPARE_EQUAL)
nTheFlag=sal_True;
else
nTheFlag=sal_False;
}
}
else
{
DateTime aDateTime=pUserData->aDateTime;
nTheFlag=IsValidEntry(&aString,&aDateTime);
}
return nTheFlag;
}
sal_Bool SvxRedlinTable::IsValidCalcEntry(const String& rString,RedlinData *pUserData)
{
sal_Bool nTheFlag=sal_True;
String aString=rString.GetToken(CALC_AUTHOR,'\t');
if(pUserData==NULL)
{
if(bAuthor)
{
if(aAuthor.CompareTo(aString)==COMPARE_EQUAL)
nTheFlag=sal_True;
else
nTheFlag=sal_False;
}
}
else
{
DateTime aDateTime=pUserData->aDateTime;
nTheFlag=IsValidEntry(&aString,&aDateTime);
}
return nTheFlag;
}
sal_Bool SvxRedlinTable::IsValidEntry(const String* pAuthorStr,
const DateTime *pDateTime,const String* pCommentStr)
{
bool nTheFlag=true;
if(bAuthor)
{
nTheFlag = aAuthor.CompareTo(*pAuthorStr)==COMPARE_EQUAL;
}
if(bDate && nTheFlag)
{
if(nDaTiMode!=FLT_DATE_NOTEQUAL)
{
nTheFlag=pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast);
}
else
{
nTheFlag=!(pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast));
}
}
if(bComment && nTheFlag)
{
xub_StrLen nStartPos = 0;
xub_StrLen nEndPos = pCommentStr->Len();
nTheFlag=pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos);
}
return nTheFlag;
}
sal_Bool SvxRedlinTable::IsValidEntry(const String* pAuthorStr,const DateTime *pDateTime)
{
sal_Bool nTheFlag=sal_True;
if(bAuthor)
{
if(aAuthor.CompareTo(*pAuthorStr)==COMPARE_EQUAL)
nTheFlag=sal_True;
else
nTheFlag=sal_False;
}
if(bDate && nTheFlag)
{
if(nDaTiMode!=FLT_DATE_NOTEQUAL)
{
nTheFlag=pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast);
}
else
{
nTheFlag=!(pDateTime->IsBetween(aDaTiFilterFirst,aDaTiFilterLast));
}
}
return nTheFlag;
}
sal_Bool SvxRedlinTable::IsValidComment(const String* pCommentStr)
{
bool nTheFlag=true;
if(bComment)
{
xub_StrLen nStartPos = 0;
xub_StrLen nEndPos = pCommentStr->Len();
nTheFlag=pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos);
}
return nTheFlag;
}
SvLBoxEntry* SvxRedlinTable::InsertEntry(const String& rStr,RedlinData *pUserData,
SvLBoxEntry* pParent,sal_uIntPtr nPos)
{
aEntryColor=GetTextColor();
if(pUserData!=NULL)
{
if(pUserData->bDisabled)
aEntryColor=Color(COL_GRAY);
}
XubString aStr= rStr;
XubString aFirstStr( aStr );
xub_StrLen nEnd = aFirstStr.Search( sal_Unicode( '\t' ) );
if( nEnd != STRING_NOTFOUND )
{
aFirstStr.Erase( nEnd );
aCurEntry = aStr;
aCurEntry.Erase( 0, ++nEnd );
}
else
aCurEntry.Erase();
return SvTreeListBox::InsertEntry( aFirstStr, pParent, sal_False, nPos, pUserData );
}
SvLBoxEntry* SvxRedlinTable::InsertEntry(const String& rStr,RedlinData *pUserData,const Color& aColor,
SvLBoxEntry* pParent,sal_uIntPtr nPos)
{
aEntryColor=aColor;
XubString aStr= rStr;
XubString aFirstStr( aStr );
xub_StrLen nEnd = aFirstStr.Search( sal_Unicode ( '\t' ) );
if( nEnd != STRING_NOTFOUND )
{
aFirstStr.Erase( nEnd );
aCurEntry = aStr;
aCurEntry.Erase( 0, ++nEnd );
}
else
aCurEntry.Erase();
return SvTreeListBox::InsertEntry( aFirstStr, pParent, sal_False, nPos, pUserData );
}
SvLBoxEntry* SvxRedlinTable::CreateEntry() const
{
return new SvxRedlinEntry;
}
void SvxRedlinTable::InitEntry( SvLBoxEntry* pEntry, const XubString& rStr,
const Image& rColl, const Image& rExp, SvLBoxButtonKind eButtonKind )
{
SvLBoxButton* pButton;
SvLBoxString* pString;
SvLBoxContextBmp* pContextBmp;
if( nTreeFlags & TREEFLAG_CHKBTN )
{
pButton= new SvLBoxButton( pEntry,eButtonKind,0,pCheckButtonData );
pEntry->AddItem( pButton );
}
pContextBmp= new SvLBoxContextBmp( pEntry,0, rColl,rExp,
SVLISTENTRYFLAG_EXPANDED);
pEntry->AddItem( pContextBmp );
pString = new SvLBoxColorString( pEntry, 0, rStr ,aEntryColor);
pEntry->AddItem( pString );
XubString aToken;
xub_Unicode* pCurToken = (xub_Unicode*)aCurEntry.GetBuffer();
sal_uInt16 nCurTokenLen;
xub_Unicode* pNextToken = (xub_Unicode*)GetToken( pCurToken, nCurTokenLen );
sal_uInt16 nCount = TabCount(); nCount--;
for( sal_uInt16 nToken = 0; nToken < nCount; nToken++ )
{
if( pCurToken && nCurTokenLen )
// aToken.Assign( pCurToken, nCurTokenLen );
aToken = XubString( pCurToken, nCurTokenLen );
else
aToken.Erase();
SvLBoxColorString* pStr = new SvLBoxColorString( pEntry, 0, aToken ,aEntryColor);
pEntry->AddItem( pStr );
pCurToken = pNextToken;
if( pCurToken )
pNextToken = (xub_Unicode*)GetToken( pCurToken, nCurTokenLen );
else
nCurTokenLen = 0;
}
}
//============================================================================
// class SvxTPView
//----------------------------------------------------------------------------
SvxTPView::SvxTPView( Window * pParent)
: TabPage( pParent, SVX_RES(SID_REDLIN_VIEW_PAGE)),
aViewData ( this, SVX_RES( DG_VIEW) ),
PbAccept ( this, SVX_RES(PB_ACCEPT ) ),
PbReject ( this, SVX_RES(PB_REJECT ) ),
PbAcceptAll ( this, SVX_RES(PB_ACCEPTALL ) ),
PbRejectAll ( this, SVX_RES(PB_REJECTALL ) ),
PbUndo ( this, SVX_RES(PB_UNDO ) ),
aTitle1 ( SVX_RES( STR_TITLE1 ) ), // lokale Resource
aTitle2 ( SVX_RES( STR_TITLE2 ) ),
aTitle3 ( SVX_RES( STR_TITLE3 ) ),
aTitle4 ( SVX_RES( STR_TITLE4 ) ),
aTitle5 ( SVX_RES( STR_TITLE5 ) ),
aStrMyName ( SVX_RES( STR_VIEW) )
{
aViewData.SetAccessibleName(String(SVX_RES(STR_TREE)));
FreeResource();
aViewData.SetHelpId(HID_REDLINING_VIEW_DG_VIEW_TABLE);
aViewData.SetHeaderBarHelpId(HID_REDLINING_VIEW_DG_VIEW_HEADER);
aMinSize=GetSizePixel();
Link aLink=LINK( this, SvxTPView, PbClickHdl);
PbAccept.SetClickHdl(aLink);
PbAcceptAll.SetClickHdl(aLink);
PbReject.SetClickHdl(aLink);
PbRejectAll.SetClickHdl(aLink);
PbUndo.SetClickHdl(aLink);
nDistance=PbAccept.GetSizePixel().Height()+2*MIN_DISTANCE;
aViewData.SetTabs(nStaticTabs);
}
String SvxTPView::GetMyName() const
{
return aStrMyName;
}
void SvxTPView::Resize()
{
Size aSize=GetOutputSizePixel();
Point aPos=aViewData.GetPosPixel();
aSize.Height()-=aPos.Y()+nDistance;
aSize.Width()-=2*aPos.X();
long newY=aPos.Y()+aSize.Height()+MIN_DISTANCE;
aPos=PbAccept.GetPosPixel();
aPos.Y()=newY;
PbAccept.SetPosPixel(aPos);
aPos=PbAcceptAll.GetPosPixel();
aPos.Y()=newY;
PbAcceptAll.SetPosPixel(aPos);
aPos=PbReject.GetPosPixel();
aPos.Y()=newY;
PbReject.SetPosPixel(aPos);
aPos=PbRejectAll.GetPosPixel();
aPos.Y()=newY;
PbRejectAll.SetPosPixel(aPos);
if(PbUndo.IsVisible())
{
aPos=PbUndo.GetPosPixel();
aPos.Y()=newY;
PbUndo.SetPosPixel(aPos);
}
aViewData.SetSizePixel(aSize);
}
void SvxTPView::InsertWriterHeader()
{
String aStrTab(sal_Unicode('\t'));
String aString(aTitle1);
aString+=aStrTab;
aString+=aTitle3;
aString+=aStrTab;
aString+=aTitle4;
aString+=aStrTab;
aString+=aTitle5;
aViewData.ClearHeader();
aViewData.InsertHeaderEntry(aString);
}
void SvxTPView::InsertCalcHeader()
{
String aStrTab(sal_Unicode('\t'));
String aString(aTitle1);
aString+=aStrTab;
aString+=aTitle2;
aString+=aStrTab;
aString+=aTitle3;
aString+=aStrTab;
aString+=aTitle4;
aString+=aStrTab;
aString+=aTitle5;
aViewData.ClearHeader();
aViewData.InsertHeaderEntry(aString);
}
void SvxTPView::EnableAccept(sal_Bool nFlag)
{
PbAccept.Enable(nFlag);
}
void SvxTPView::EnableAcceptAll(sal_Bool nFlag)
{
PbAcceptAll.Enable(nFlag);
}
void SvxTPView::EnableReject(sal_Bool nFlag)
{
PbReject.Enable(nFlag);
}
void SvxTPView::EnableRejectAll(sal_Bool nFlag)
{
PbRejectAll.Enable(nFlag);
}
void SvxTPView::ShowUndo(sal_Bool nFlag)
{
PbUndo.Show(nFlag);
}
void SvxTPView::EnableUndo(sal_Bool nFlag)
{
PbUndo.Enable(nFlag);
}
Size SvxTPView::GetMinSizePixel()
{
Size aSize=aMinSize;
if(PbUndo.IsVisible())
{
sal_uIntPtr nSize=PbUndo.GetSizePixel().Width()
+PbUndo.GetPosPixel().X()
+PbAccept.GetPosPixel().X();
aSize.Width()=nSize;
}
return aSize;
}
SvxRedlinTable* SvxTPView::GetTableControl()
{
return &aViewData;
}
IMPL_LINK( SvxTPView, PbClickHdl, PushButton*, pPushB )
{
if(pPushB==&PbAccept)
{
AcceptClickLk.Call(this);
}
else if(pPushB==&PbAcceptAll)
{
AcceptAllClickLk.Call(this);
}
else if(pPushB==&PbReject)
{
RejectClickLk.Call(this);
}
else if(pPushB==&PbRejectAll)
{
RejectAllClickLk.Call(this);
}
else if(pPushB==&PbUndo)
{
UndoClickLk.Call(this);
}
return 0;
}
//============================================================================
// class SvxTPFilter
//----------------------------------------------------------------------------
SvxTPFilter::SvxTPFilter( Window * pParent)
: TabPage( pParent, SVX_RES(SID_REDLIN_FILTER_PAGE)),
pRedlinTable(NULL),
aCbDate ( this, SVX_RES( CB_DATE ) ),
aLbDate ( this, SVX_RES( LB_DATE ) ),
aDfDate ( this, SVX_RES( DF_DATE ) ),
aTfDate ( this, SVX_RES( TF_DATE ) ),
aIbClock ( this, SVX_RES( IB_CLOCK ) ),
aFtDate2 ( this, SVX_RES( FT_DATE2 ) ),
aDfDate2 ( this, SVX_RES( DF_DATE2 ) ),
aTfDate2 ( this, SVX_RES( TF_DATE2 ) ),
aIbClock2 ( this, SVX_RES( IB_CLOCK2) ),
aCbAuthor ( this, SVX_RES( CB_AUTOR ) ),
aLbAuthor ( this, SVX_RES( LB_AUTOR ) ),
aCbRange ( this, SVX_RES( CB_RANGE ) ),
aEdRange ( this, SVX_RES( ED_RANGE ) ),
aBtnRange ( this, SVX_RES( BTN_REF ) ),
aLbAction ( this, SVX_RES( LB_ACTION ) ),
aCbComment ( this, SVX_RES( CB_COMMENT) ),
aEdComment ( this, SVX_RES( ED_COMMENT) ),
aActionStr ( SVX_RES( STR_ACTION) ),
aStrMyName ( SVX_RES( STR_FILTER) ),
bModified (sal_False)
{
aLbDate.SetAccessibleName( String( SVX_RES( STR_DATE_COMBOX) ) );
aDfDate.SetAccessibleName( String( SVX_RES( STR_DATE_SPIN) ) );
aTfDate.SetAccessibleName( String( SVX_RES( STR_DATE_TIME_SPIN) ) );
aDfDate2.SetAccessibleName( String( SVX_RES( STR_DATE_SPIN1) ) );
aTfDate2.SetAccessibleName( String( SVX_RES( STR_DATE_TIME_SPIN1) ) );
aLbAuthor.SetAccessibleName(aCbAuthor.GetText());
aLbAction.SetAccessibleName( String( SVX_RES( STR_ACTION) ) );
aEdComment.SetAccessibleName(aCbComment.GetText());
Image aImgTimeHC( SVX_RES( IMG_TIME_H ) );
FreeResource();
aIbClock.SetModeImage( aImgTimeHC, BMP_COLOR_HIGHCONTRAST );
aIbClock2.SetModeImage( aImgTimeHC, BMP_COLOR_HIGHCONTRAST );
aDfDate.SetShowDateCentury( sal_True );
aDfDate2.SetShowDateCentury( sal_True );
aRangeStr=aCbRange.GetText();
aLbDate.SelectEntryPos(0);
aLbDate.SetSelectHdl( LINK( this, SvxTPFilter, SelDateHdl ) );
aIbClock.SetClickHdl( LINK( this, SvxTPFilter, TimeHdl) );
aIbClock2.SetClickHdl( LINK( this, SvxTPFilter,TimeHdl) );
aBtnRange.SetClickHdl( LINK( this, SvxTPFilter, RefHandle));
Link aLink=LINK( this, SvxTPFilter, RowEnableHdl) ;
aCbDate.SetClickHdl(aLink);
aCbAuthor.SetClickHdl(aLink);
aCbRange.SetClickHdl(aLink);
aCbComment.SetClickHdl(aLink);
Link a2Link=LINK( this, SvxTPFilter, ModifyDate);
aDfDate.SetModifyHdl(a2Link);
aTfDate.SetModifyHdl(a2Link);
aDfDate2.SetModifyHdl(a2Link);
aTfDate2.SetModifyHdl(a2Link);
Link a3Link=LINK( this, SvxTPFilter, ModifyHdl);
aEdRange.SetModifyHdl(a3Link);
aEdComment.SetModifyHdl(a3Link);
aLbAction.SetSelectHdl(a3Link);
aLbAuthor.SetSelectHdl(a3Link);
RowEnableHdl(&aCbDate);
RowEnableHdl(&aCbAuthor);
RowEnableHdl(&aCbRange);
RowEnableHdl(&aCbComment);
Date aDate;
Time aTime;
aDfDate.SetDate(aDate);
aTfDate.SetTime(aTime);
aDfDate2.SetDate(aDate);
aTfDate2.SetTime(aTime);
HideRange();
ShowAction();
bModified=sal_False;
aLbDate.SetAccessibleRelationLabeledBy(&aCbDate);
aLbAuthor.SetAccessibleRelationLabeledBy(&aCbAuthor);
aLbAction.SetAccessibleRelationLabeledBy(&aCbRange);
aEdRange.SetAccessibleRelationLabeledBy(&aCbRange);
aBtnRange.SetAccessibleRelationLabeledBy(&aCbRange);
aEdComment.SetAccessibleRelationLabeledBy(&aCbComment);
aDfDate2.SetAccessibleRelationLabeledBy(&aDfDate2);
aTfDate2.SetAccessibleRelationLabeledBy(&aTfDate2);
}
void SvxTPFilter::SetRedlinTable(SvxRedlinTable* pTable)
{
pRedlinTable=pTable;
}
String SvxTPFilter::GetMyName() const
{
return aStrMyName;
}
void SvxTPFilter::DisableRange(sal_Bool bFlag)
{
if(bFlag)
{
aCbRange.Disable();
aEdRange.Disable();
aBtnRange.Disable();
}
else
{
aCbRange.Enable();
aEdRange.Enable();
aBtnRange.Enable();
}
}
void SvxTPFilter::ShowDateFields(sal_uInt16 nKind)
{
String aEmpty;
switch(nKind)
{
case FLT_DATE_BEFORE:
EnableDateLine1(sal_True);
EnableDateLine2(sal_False);
break;
case FLT_DATE_SINCE:
EnableDateLine1(sal_True);
EnableDateLine2(sal_False);
break;
case FLT_DATE_EQUAL:
EnableDateLine1(sal_True);
aTfDate.Disable();
aTfDate.SetText(aEmpty);
EnableDateLine2(sal_False);
break;
case FLT_DATE_NOTEQUAL:
EnableDateLine1(sal_True);
aTfDate.Disable();
aTfDate.SetText(aEmpty);
EnableDateLine2(sal_False);
break;
case FLT_DATE_BETWEEN:
EnableDateLine1(sal_True);
EnableDateLine2(sal_True);
break;
case FLT_DATE_SAVE:
EnableDateLine1(sal_False);
EnableDateLine2(sal_False);
break;
}
}
void SvxTPFilter::EnableDateLine1(sal_Bool bFlag)
{
if(bFlag && aCbDate.IsChecked())
{
aDfDate.Enable();
aTfDate.Enable();
aIbClock.Enable();
}
else
{
aDfDate.Disable();
aTfDate.Disable();
aIbClock.Disable();
}
}
void SvxTPFilter::EnableDateLine2(sal_Bool bFlag)
{
String aEmpty;
if(bFlag && aCbDate.IsChecked())
{
aFtDate2.Enable();
aDfDate2.Enable();
aTfDate2.Enable();
aIbClock2.Enable();
}
else
{
aFtDate2.Disable();
aDfDate2.Disable();
aDfDate2.SetText(aEmpty);
aTfDate2.Disable();
aTfDate2.SetText(aEmpty);
aIbClock2.Disable();
}
}
Date SvxTPFilter::GetFirstDate() const
{
return aDfDate.GetDate();
}
void SvxTPFilter::SetFirstDate(const Date &aDate)
{
aDfDate.SetDate(aDate);
}
Time SvxTPFilter::GetFirstTime() const
{
return aTfDate.GetTime();
}
void SvxTPFilter::SetFirstTime(const Time &aTime)
{
aTfDate.SetTime(aTime);
}
Date SvxTPFilter::GetLastDate() const
{
return aDfDate2.GetDate();
}
void SvxTPFilter::SetLastDate(const Date &aDate)
{
aDfDate2.SetDate(aDate);
}
Time SvxTPFilter::GetLastTime() const
{
return aTfDate2.GetTime();
}
void SvxTPFilter::SetLastTime(const Time &aTime)
{
aTfDate2.SetTime(aTime);
}
void SvxTPFilter::SetDateMode(sal_uInt16 nMode)
{
aLbDate.SelectEntryPos(nMode);
SelDateHdl(&aLbDate);
}
sal_uInt16 SvxTPFilter::GetDateMode()
{
return (sal_uInt16) aLbDate.GetSelectEntryPos();
}
void SvxTPFilter::ClearAuthors()
{
aLbAuthor.Clear();
}
void SvxTPFilter::InsertAuthor( const String& rString, sal_uInt16 nPos)
{
aLbAuthor.InsertEntry(rString,nPos);
}
String SvxTPFilter::GetSelectedAuthor() const
{
return aLbAuthor.GetSelectEntry();
}
sal_uInt16 SvxTPFilter::GetSelectedAuthorPos()
{
return (sal_uInt16) aLbAuthor.GetSelectEntryPos();
}
void SvxTPFilter::SelectedAuthorPos(sal_uInt16 nPos)
{
aLbAuthor.SelectEntryPos(nPos);
}
sal_uInt16 SvxTPFilter::SelectAuthor(const String& aString)
{
aLbAuthor.SelectEntry(aString);
return aLbAuthor.GetSelectEntryPos();
}
void SvxTPFilter::SetRange(const String& rString)
{
aEdRange.SetText(rString);
}
String SvxTPFilter::GetRange() const
{
return aEdRange.GetText();
}
void SvxTPFilter::SetFocusToRange()
{
aEdRange.GrabFocus();
}
void SvxTPFilter::HideRange(sal_Bool bHide)
{
if(bHide)
{
aCbRange.Hide();
aEdRange.Hide();
aBtnRange.Hide();
}
else
{
ShowAction(sal_False);
aCbRange.SetText(aRangeStr);
aCbRange.Show();
aEdRange.Show();
aBtnRange.Show();
}
}
void SvxTPFilter::HideClocks(sal_Bool bHide)
{
if(bHide)
{
aIbClock. Hide();
aIbClock2.Hide();
}
else
{
aIbClock. Show();
aIbClock2.Show();
}
}
void SvxTPFilter::SetComment(const String &rComment)
{
aEdComment.SetText(rComment);
}
String SvxTPFilter::GetComment()const
{
return aEdComment.GetText();
}
sal_Bool SvxTPFilter::IsDate()
{
return aCbDate.IsChecked();
}
sal_Bool SvxTPFilter::IsAuthor()
{
return aCbAuthor.IsChecked();
}
sal_Bool SvxTPFilter::IsRange()
{
return aCbRange.IsChecked();
}
sal_Bool SvxTPFilter::IsAction()
{
return aCbRange.IsChecked();
}
sal_Bool SvxTPFilter::IsComment()
{
return aCbComment.IsChecked();
}
void SvxTPFilter::CheckDate(sal_Bool bFlag)
{
aCbDate.Check(bFlag);
RowEnableHdl(&aCbDate);
bModified=sal_False;
}
void SvxTPFilter::CheckAuthor(sal_Bool bFlag)
{
aCbAuthor.Check(bFlag);
RowEnableHdl(&aCbAuthor);
bModified=sal_False;
}
void SvxTPFilter::CheckRange(sal_Bool bFlag)
{
aCbRange.Check(bFlag);
RowEnableHdl(&aCbRange);
bModified=sal_False;
}
void SvxTPFilter::CheckAction(sal_Bool bFlag)
{
aCbRange.Check(bFlag);
RowEnableHdl(&aCbRange);
bModified=sal_False;
}
void SvxTPFilter::CheckComment(sal_Bool bFlag)
{
aCbComment.Check(bFlag);
RowEnableHdl(&aCbComment);
bModified=sal_False;
}
void SvxTPFilter::ShowAction(sal_Bool bShow)
{
if(!bShow)
{
aCbRange.Hide();
aLbAction.Hide();
aCbRange.SetHelpId(HID_REDLINING_FILTER_CB_RANGE);
}
else
{
HideRange();
aCbRange.SetText(aActionStr);
aCbRange.SetHelpId(HID_REDLINING_FILTER_CB_ACTION);
aCbRange.Show();
aLbAction.Show();
}
}
ListBox* SvxTPFilter::GetLbAction()
{
return &aLbAction;
}
IMPL_LINK( SvxTPFilter, SelDateHdl, ListBox*, pLb )
{
ShowDateFields((sal_uInt16)aLbDate.GetSelectEntryPos());
ModifyHdl(pLb);
return 0;
}
IMPL_LINK( SvxTPFilter, RowEnableHdl, CheckBox*, pCB )
{
if(pCB==&aCbDate)
{
aLbDate.Enable(aCbDate.IsChecked());
aLbDate.Invalidate();
EnableDateLine1(sal_False);
EnableDateLine2(sal_False);
if(aCbDate.IsChecked()) SelDateHdl(&aLbDate);
}
else if(pCB==&aCbAuthor)
{
aLbAuthor.Enable(aCbAuthor.IsChecked());
aLbAuthor.Invalidate();
}
else if(pCB==&aCbRange)
{
aLbAction.Enable(aCbRange.IsChecked());
aLbAction.Invalidate();
aEdRange.Enable(aCbRange.IsChecked());
aBtnRange.Enable(aCbRange.IsChecked());
}
else if(pCB==&aCbComment)
{
aEdComment.Enable(aCbComment.IsChecked());
aEdComment.Invalidate();
}
ModifyHdl(pCB);
return 0;
}
IMPL_LINK( SvxTPFilter, TimeHdl, ImageButton*,pIB )
{
Date aDate;
Time aTime;
if(pIB==&aIbClock)
{
aDfDate.SetDate(aDate);
aTfDate.SetTime(aTime);
}
else if(pIB==&aIbClock2)
{
aDfDate2.SetDate(aDate);
aTfDate2.SetTime(aTime);
}
ModifyHdl(&aDfDate);
return 0;
}
IMPL_LINK( SvxTPFilter, ModifyHdl, void*, pCtr)
{
if(pCtr!=NULL)
{
if(pCtr==&aCbDate || pCtr==&aLbDate ||
pCtr==&aDfDate || pCtr==&aTfDate ||
pCtr==&aIbClock || pCtr==&aFtDate2||
pCtr==&aDfDate2 || pCtr==&aTfDate2||
pCtr==&aIbClock2)
{
aModifyDateLink.Call(this);
}
else if(pCtr==&aCbAuthor || pCtr==&aLbAuthor)
{
aModifyAuthorLink.Call(this);
}
else if(pCtr==&aCbRange || pCtr==&aEdRange ||
pCtr==&aBtnRange )
{
aModifyRefLink.Call(this);
}
else if(pCtr==&aCbComment || pCtr==&aEdComment)
{
aModifyComLink.Call(this);
}
bModified=sal_True;
aModifyLink.Call(this);
}
return 0;
}
void SvxTPFilter::DeactivatePage()
{
if(bModified)
{
if(pRedlinTable!=NULL)
{
pRedlinTable->SetFilterDate(IsDate());
pRedlinTable->SetDateTimeMode(GetDateMode());
pRedlinTable->SetFirstDate(aDfDate.GetDate());
pRedlinTable->SetLastDate(aDfDate2.GetDate());
pRedlinTable->SetFirstTime(aTfDate.GetTime());
pRedlinTable->SetLastTime(aTfDate2.GetTime());
pRedlinTable->SetFilterAuthor(IsAuthor());
pRedlinTable->SetAuthor(GetSelectedAuthor());
pRedlinTable->SetFilterComment(IsComment());
utl::SearchParam aSearchParam( aEdComment.GetText(),
utl::SearchParam::SRCH_REGEXP,sal_False,sal_False,sal_False );
pRedlinTable->SetCommentParams(&aSearchParam);
pRedlinTable->UpdateFilterTest();
}
aReadyLink.Call(this);
}
bModified=sal_False;
TabPage::DeactivatePage();
}
void SvxTPFilter::Enable( bool bEnable, bool bChild)
{
TabPage::Enable(bEnable,bChild);
if(aCbDate.IsEnabled())
{
RowEnableHdl(&aCbDate);
RowEnableHdl(&aCbAuthor);
RowEnableHdl(&aCbRange);
RowEnableHdl(&aCbComment);
}
}
void SvxTPFilter::Disable( bool bChild)
{
Enable( false, bChild );
}
void SvxTPFilter::SetAccessibleRelationMemberOf( Window* pWin )
{
aCbDate.SetAccessibleRelationMemberOf(pWin);
aLbDate.SetAccessibleRelationMemberOf(pWin);
aDfDate.SetAccessibleRelationMemberOf(pWin);
aTfDate.SetAccessibleRelationMemberOf(pWin);
aIbClock.SetAccessibleRelationMemberOf(pWin);
aFtDate2.SetAccessibleRelationMemberOf(pWin);
aDfDate2.SetAccessibleRelationMemberOf(pWin);
aTfDate2.SetAccessibleRelationMemberOf(pWin);
aIbClock2.SetAccessibleRelationMemberOf(pWin);
aCbAuthor.SetAccessibleRelationMemberOf(pWin);
aLbAuthor.SetAccessibleRelationMemberOf(pWin);
aCbRange.SetAccessibleRelationMemberOf(pWin);
aEdRange.SetAccessibleRelationMemberOf(pWin);
aBtnRange.SetAccessibleRelationMemberOf(pWin);
aLbAction.SetAccessibleRelationMemberOf(pWin);
aCbComment.SetAccessibleRelationMemberOf(pWin);
aEdComment.SetAccessibleRelationMemberOf(pWin);
}
IMPL_LINK( SvxTPFilter, ModifyDate, void*,pTF)
{
Date aDate;
Time aTime(0);
if(&aDfDate==pTF)
{
if(aDfDate.GetText().Len()==0)
aDfDate.SetDate(aDate);
if(pRedlinTable!=NULL)
pRedlinTable->SetFirstDate(aDfDate.GetDate());
}
else if(&aDfDate2==pTF)
{
if(aDfDate2.GetText().Len()==0)
aDfDate2.SetDate(aDate);
if(pRedlinTable!=NULL)
pRedlinTable->SetLastDate(aDfDate2.GetDate());
}
else if(&aTfDate==pTF)
{
if(aTfDate.GetText().Len()==0)
aTfDate.SetTime(aTime);
if(pRedlinTable!=NULL)
pRedlinTable->SetFirstTime(aTfDate.GetTime());
}
else if(&aTfDate2==pTF)
{
if(aTfDate2.GetText().Len()==0)
aTfDate2.SetTime(aTime);
if(pRedlinTable!=NULL)
pRedlinTable->SetLastTime(aTfDate2.GetTime());
}
ModifyHdl(&aDfDate);
return 0;
}
IMPL_LINK( SvxTPFilter, RefHandle, PushButton*, pRef )
{
if(pRef!=NULL)
{
aRefLink.Call(this);
}
return 0;
}
static Size gDiffSize;
//============================================================================
// class SvxAcceptChgCtr
//----------------------------------------------------------------------------
SvxAcceptChgCtr::SvxAcceptChgCtr( Window* pParent, WinBits nWinStyle)
: Control(pParent,nWinStyle |WB_DIALOGCONTROL),
aTCAccept(this,WB_TABSTOP |WB_DIALOGCONTROL)
{
pTPFilter=new SvxTPFilter(&aTCAccept);
pTPView=new SvxTPView(&aTCAccept);
aMinSize=pTPView->GetMinSizePixel();
aTCAccept.InsertPage( TP_VIEW, pTPView->GetMyName());
aTCAccept.InsertPage( TP_FILTER, pTPFilter->GetMyName());
aTCAccept.SetTabPage( TP_VIEW, pTPView);
aTCAccept.SetTabPage( TP_FILTER, pTPFilter);
aTCAccept.SetHelpId(HID_REDLINING_TABCONTROL);
aTCAccept.SetTabPageSizePixel(aMinSize);
Size aSize=aTCAccept.GetSizePixel();
gDiffSize.Height()=aSize.Height()-aMinSize.Height();
gDiffSize.Width()=aSize.Width()-aMinSize.Width();
pTPFilter->SetRedlinTable(GetViewTable());
aTCAccept.Show();
ShowViewPage();
}
SvxAcceptChgCtr::SvxAcceptChgCtr( Window* pParent, const ResId& rResId )
: Control(pParent,rResId ),
aTCAccept(this,WB_TABSTOP |WB_DIALOGCONTROL)
{
pTPFilter=new SvxTPFilter(&aTCAccept);
pTPView=new SvxTPView(&aTCAccept);
aMinSize=pTPView->GetMinSizePixel();
aTCAccept.InsertPage( TP_VIEW, pTPView->GetMyName());
aTCAccept.InsertPage( TP_FILTER, pTPFilter->GetMyName());
aTCAccept.SetTabPage( TP_VIEW, pTPView);
aTCAccept.SetTabPage( TP_FILTER, pTPFilter);
aTCAccept.SetHelpId(HID_REDLINING_TABCONTROL);
aTCAccept.SetTabPageSizePixel(aMinSize);
Size aSize=aTCAccept.GetSizePixel();
gDiffSize.Height()=aSize.Height()-aMinSize.Height();
gDiffSize.Width()=aSize.Width()-aMinSize.Width();
pTPFilter->SetRedlinTable(GetViewTable());
WinBits nWinStyle=GetStyle()|WB_DIALOGCONTROL;
SetStyle(nWinStyle);
aTCAccept.Show();
ShowViewPage();
Resize();
}
SvxAcceptChgCtr::~SvxAcceptChgCtr()
{
delete pTPView;
delete pTPFilter;
}
void SvxAcceptChgCtr::Resize()
{
aMinSize=pTPView->GetMinSizePixel();
Size aSize=GetOutputSizePixel();
sal_Bool bFlag=sal_False;
if(aMinSize.Height()>aSize.Height())
{
aSize.Height()=aMinSize.Height();
bFlag=sal_True;
}
if(aMinSize.Width()>aSize.Width())
{
aSize.Width()=aMinSize.Width();
bFlag=sal_True;
}
if(bFlag)
{
SetOutputSizePixel(aSize);
aMinSizeLink.Call(this);
}
aSize.Height()-=2;
aSize.Width()-=2;
aTCAccept.SetSizePixel(aSize);
}
Size SvxAcceptChgCtr::GetMinSizePixel() const
{
Size aSize=pTPView->GetMinSizePixel();
aSize.Height()+=gDiffSize.Height();
aSize.Width()+=gDiffSize.Width();
return aSize;
}
void SvxAcceptChgCtr::ShowFilterPage()
{
aTCAccept.SetCurPageId(TP_FILTER);
}
void SvxAcceptChgCtr::ShowViewPage()
{
aTCAccept.SetCurPageId(TP_VIEW);
}
sal_Bool SvxAcceptChgCtr::IsFilterPageVisible()
{
return (aTCAccept.GetCurPageId()==TP_FILTER);
}
sal_Bool SvxAcceptChgCtr::IsViewPageVisible()
{
return (aTCAccept.GetCurPageId()==TP_VIEW);
}
SvxTPFilter* SvxAcceptChgCtr::GetFilterPage()
{
return pTPFilter;
}
SvxTPView* SvxAcceptChgCtr::GetViewPage()
{
return pTPView;
}
SvxRedlinTable* SvxAcceptChgCtr::GetViewTable()
{
if(pTPView!=NULL)
{
return pTPView->GetTableControl();
}
else
{
return NULL;
}
}