/************************************************************** * * 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 #include #include #include #include #include // INCLUDE ------------------------------------------------------------------- #include #include #include "ctredlin.hrc" #include #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; } }