xref: /AOO41X/main/sc/source/core/tool/chgviset.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sc.hxx"
26 
27 
28 
29 #include <unotools/textsearch.hxx>
30 
31 #include "chgviset.hxx"
32 #include "rechead.hxx"
33 #include "chgtrack.hxx"
34 
35 // -----------------------------------------------------------------------
~ScChangeViewSettings()36 ScChangeViewSettings::~ScChangeViewSettings()
37 {
38     if(pCommentSearcher!=NULL)
39         delete pCommentSearcher;
40 }
41 
ScChangeViewSettings(const ScChangeViewSettings & r)42 ScChangeViewSettings::ScChangeViewSettings( const ScChangeViewSettings& r )
43 {
44     SetTheComment(r.aComment);
45 
46     aFirstDateTime  =r.aFirstDateTime;
47     aLastDateTime   =r.aLastDateTime;
48     aAuthorToShow   =r.aAuthorToShow;
49     aRangeList      =r.aRangeList;
50     eDateMode       =r.eDateMode;
51     bShowIt         =r.bShowIt;
52     bIsDate         =r.bIsDate;
53     bIsAuthor       =r.bIsAuthor;
54     bIsComment      =r.bIsComment;
55     bIsRange        =r.bIsRange;
56     bEveryoneButMe  =r.bEveryoneButMe;
57     bShowAccepted   =r.bShowAccepted;
58     bShowRejected   =r.bShowRejected;
59     mbIsActionRange = r.mbIsActionRange;
60     mnFirstAction   = r.mnFirstAction;
61     mnLastAction    = r.mnLastAction;
62 
63 }
64 
operator =(const ScChangeViewSettings & r)65 ScChangeViewSettings& ScChangeViewSettings::operator=( const ScChangeViewSettings& r )
66 {
67     SetTheComment(r.aComment);
68 
69     aFirstDateTime  =r.aFirstDateTime;
70     aLastDateTime   =r.aLastDateTime;
71     aAuthorToShow   =r.aAuthorToShow;
72     aRangeList      =r.aRangeList;
73     eDateMode       =r.eDateMode;
74     bShowIt         =r.bShowIt;
75     bIsDate         =r.bIsDate;
76     bIsAuthor       =r.bIsAuthor;
77     bIsComment      =r.bIsComment;
78     bIsRange        =r.bIsRange;
79     bEveryoneButMe  =r.bEveryoneButMe;
80     bShowAccepted   =r.bShowAccepted;
81     bShowRejected   =r.bShowRejected;
82     mbIsActionRange = r.mbIsActionRange;
83     mnFirstAction   = r.mnFirstAction;
84     mnLastAction    = r.mnLastAction;
85 
86     return *this;
87 }
88 
IsValidComment(const String * pCommentStr) const89 sal_Bool ScChangeViewSettings::IsValidComment(const String* pCommentStr) const
90 {
91     sal_Bool nTheFlag=sal_True;
92 
93     if(pCommentSearcher!=NULL)
94     {
95         xub_StrLen nStartPos = 0;
96         xub_StrLen nEndPos = pCommentStr->Len();
97 
98         nTheFlag=sal::static_int_cast<sal_Bool>(pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos));
99     }
100     return nTheFlag;
101 }
102 
SetTheComment(const String & rString)103 void ScChangeViewSettings::SetTheComment(const String& rString)
104 {
105     aComment=rString;
106     if(pCommentSearcher!=NULL)
107     {
108         delete pCommentSearcher;
109         pCommentSearcher=NULL;
110     }
111 
112     if(rString.Len()>0)
113     {
114         utl::SearchParam aSearchParam( rString,
115             utl::SearchParam::SRCH_REGEXP,sal_False,sal_False,sal_False );
116 
117         pCommentSearcher = new utl::TextSearch( aSearchParam, *ScGlobal::pCharClass );
118     }
119 }
120 
AdjustDateMode(const ScDocument & rDoc)121 void ScChangeViewSettings::AdjustDateMode( const ScDocument& rDoc )
122 {
123     switch ( eDateMode )
124     {   // corresponds with ScViewUtil::IsActionShown
125         case SCDM_DATE_EQUAL :
126         case SCDM_DATE_NOTEQUAL :
127             aFirstDateTime.SetTime( 0 );
128             aLastDateTime = aFirstDateTime;
129             aLastDateTime.SetTime( 23595999 );
130             break;
131         case SCDM_DATE_SAVE:
132         {
133             const ScChangeAction* pLast = 0;
134             ScChangeTrack* pTrack = rDoc.GetChangeTrack();
135             if ( pTrack )
136             {
137                 pLast = pTrack->GetLastSaved();
138                 if ( pLast )
139                 {
140                     aFirstDateTime = pLast->GetDateTime();
141 #if 0
142 // This would be the proper handling. But since the SvxTPFilter dialog uses
143 // DateField/TimeField, and the filter dialog is used in ScAcceptChgDlg as the
144 // controlling instance, and the TimeFields are used there without seconds or
145 // 100ths, we'd display some extra entries between the floor of the minute and
146 // the start of the next minute.
147                     // add one 100th second to point past last saved
148                     aFirstDateTime += Time( 0, 0, 0, 1 );
149 #else
150                     // Set the next minute as the start time and assume that
151                     // the document isn't saved, reloaded, edited and filter set
152                     // all together during the gap between those two times.
153                     aFirstDateTime += Time( 0, 1 );
154                     aFirstDateTime.SetSec(0);
155                     aFirstDateTime.Set100Sec(0);
156 #endif
157                 }
158             }
159             if ( !pLast )
160             {
161                 aFirstDateTime.SetDate( 18990101 );
162                 aFirstDateTime.SetTime( 0 );
163             }
164             aLastDateTime = Date();
165             aLastDateTime.SetYear( aLastDateTime.GetYear() + 100 );
166         }
167         break;
168         default:
169         {
170             // added to avoid warnings
171         }
172     }
173 }
174 
175