xref: /trunk/main/sc/source/core/tool/chgviset.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_sc.hxx"
30 
31 
32 
33 #include <unotools/textsearch.hxx>
34 
35 #include "chgviset.hxx"
36 #include "rechead.hxx"
37 #include "chgtrack.hxx"
38 
39 // -----------------------------------------------------------------------
40 ScChangeViewSettings::~ScChangeViewSettings()
41 {
42     if(pCommentSearcher!=NULL)
43         delete pCommentSearcher;
44 }
45 
46 ScChangeViewSettings::ScChangeViewSettings( const ScChangeViewSettings& r )
47 {
48     SetTheComment(r.aComment);
49 
50     aFirstDateTime  =r.aFirstDateTime;
51     aLastDateTime   =r.aLastDateTime;
52     aAuthorToShow   =r.aAuthorToShow;
53     aRangeList      =r.aRangeList;
54     eDateMode       =r.eDateMode;
55     bShowIt         =r.bShowIt;
56     bIsDate         =r.bIsDate;
57     bIsAuthor       =r.bIsAuthor;
58     bIsComment      =r.bIsComment;
59     bIsRange        =r.bIsRange;
60     bEveryoneButMe  =r.bEveryoneButMe;
61     bShowAccepted   =r.bShowAccepted;
62     bShowRejected   =r.bShowRejected;
63     mbIsActionRange = r.mbIsActionRange;
64     mnFirstAction   = r.mnFirstAction;
65     mnLastAction    = r.mnLastAction;
66 
67 }
68 
69 ScChangeViewSettings& ScChangeViewSettings::operator=( const ScChangeViewSettings& r )
70 {
71     SetTheComment(r.aComment);
72 
73     aFirstDateTime  =r.aFirstDateTime;
74     aLastDateTime   =r.aLastDateTime;
75     aAuthorToShow   =r.aAuthorToShow;
76     aRangeList      =r.aRangeList;
77     eDateMode       =r.eDateMode;
78     bShowIt         =r.bShowIt;
79     bIsDate         =r.bIsDate;
80     bIsAuthor       =r.bIsAuthor;
81     bIsComment      =r.bIsComment;
82     bIsRange        =r.bIsRange;
83     bEveryoneButMe  =r.bEveryoneButMe;
84     bShowAccepted   =r.bShowAccepted;
85     bShowRejected   =r.bShowRejected;
86     mbIsActionRange = r.mbIsActionRange;
87     mnFirstAction   = r.mnFirstAction;
88     mnLastAction    = r.mnLastAction;
89 
90     return *this;
91 }
92 
93 sal_Bool ScChangeViewSettings::IsValidComment(const String* pCommentStr) const
94 {
95     sal_Bool nTheFlag=sal_True;
96 
97     if(pCommentSearcher!=NULL)
98     {
99         xub_StrLen nStartPos = 0;
100         xub_StrLen nEndPos = pCommentStr->Len();
101 
102         nTheFlag=sal::static_int_cast<sal_Bool>(pCommentSearcher->SearchFrwrd( *pCommentStr, &nStartPos, &nEndPos));
103     }
104     return nTheFlag;
105 }
106 
107 void ScChangeViewSettings::SetTheComment(const String& rString)
108 {
109     aComment=rString;
110     if(pCommentSearcher!=NULL)
111     {
112         delete pCommentSearcher;
113         pCommentSearcher=NULL;
114     }
115 
116     if(rString.Len()>0)
117     {
118         utl::SearchParam aSearchParam( rString,
119             utl::SearchParam::SRCH_REGEXP,sal_False,sal_False,sal_False );
120 
121         pCommentSearcher = new utl::TextSearch( aSearchParam, *ScGlobal::pCharClass );
122     }
123 }
124 
125 void ScChangeViewSettings::AdjustDateMode( const ScDocument& rDoc )
126 {
127     switch ( eDateMode )
128     {   // corresponds with ScViewUtil::IsActionShown
129         case SCDM_DATE_EQUAL :
130         case SCDM_DATE_NOTEQUAL :
131             aFirstDateTime.SetTime( 0 );
132             aLastDateTime = aFirstDateTime;
133             aLastDateTime.SetTime( 23595999 );
134             break;
135         case SCDM_DATE_SAVE:
136         {
137             const ScChangeAction* pLast = 0;
138             ScChangeTrack* pTrack = rDoc.GetChangeTrack();
139             if ( pTrack )
140             {
141                 pLast = pTrack->GetLastSaved();
142                 if ( pLast )
143                 {
144                     aFirstDateTime = pLast->GetDateTime();
145 #if 0
146 // This would be the proper handling. But since the SvxTPFilter dialog uses
147 // DateField/TimeField, and the filter dialog is used in ScAcceptChgDlg as the
148 // controlling instance, and the TimeFields are used there without seconds or
149 // 100ths, we'd display some extra entries between the floor of the minute and
150 // the start of the next minute.
151                     // add one 100th second to point past last saved
152                     aFirstDateTime += Time( 0, 0, 0, 1 );
153 #else
154                     // Set the next minute as the start time and assume that
155                     // the document isn't saved, reloaded, edited and filter set
156                     // all together during the gap between those two times.
157                     aFirstDateTime += Time( 0, 1 );
158                     aFirstDateTime.SetSec(0);
159                     aFirstDateTime.Set100Sec(0);
160 #endif
161                 }
162             }
163             if ( !pLast )
164             {
165                 aFirstDateTime.SetDate( 18990101 );
166                 aFirstDateTime.SetTime( 0 );
167             }
168             aLastDateTime = Date();
169             aLastDateTime.SetYear( aLastDateTime.GetYear() + 100 );
170         }
171         break;
172         default:
173         {
174             // added to avoid warnings
175         }
176     }
177 }
178 
179