Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "global.hxx"
21 : #include "reffact.hxx"
22 : #include "document.hxx"
23 : #include "docsh.hxx"
24 : #include "scresid.hxx"
25 : #include "globstr.hrc"
26 : #include "highred.hrc"
27 :
28 : #include "highred.hxx"
29 : #include <vcl/msgbox.hxx>
30 : #include <sfx2/app.hxx>
31 :
32 : // defines -------------------------------------------------------------------
33 :
34 : #define ABS_SREF SCA_VALID \
35 : | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE
36 : #define ABS_DREF ABS_SREF \
37 : | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE
38 : #define ABS_SREF3D ABS_SREF | SCA_TAB_3D
39 : #define ABS_DREF3D ABS_DREF | SCA_TAB_3D
40 :
41 :
42 :
43 : #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute();
44 :
45 : inline void EnableDisable( Window& rWin, sal_Bool bEnable )
46 : {
47 : if (bEnable)
48 : rWin.Enable();
49 : else
50 : rWin.Disable();
51 : }
52 :
53 : //============================================================================
54 : // class ScHighlightChgDlg
55 :
56 : //----------------------------------------------------------------------------
57 0 : ScHighlightChgDlg::ScHighlightChgDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
58 : ScViewData* ptrViewData)
59 :
60 : : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_HIGHLIGHT_CHANGES ),
61 : //
62 : aHighlightBox ( this, ScResId( CB_HIGHLIGHT)),
63 : aFlFilter ( this, ScResId( FL_FILTER)),
64 : aFilterCtr ( this),
65 : aCbAccept ( this, ScResId( CB_HIGHLIGHT_ACCEPT)),
66 : aCbReject ( this, ScResId( CB_HIGHLIGHT_REJECT)),
67 : aOkButton ( this, ScResId( BTN_OK ) ),
68 : aCancelButton ( this, ScResId( BTN_CANCEL ) ),
69 : aHelpButton ( this, ScResId( BTN_HELP ) ),
70 : aEdAssign ( this, this, ScResId( ED_ASSIGN ) ),
71 : aRbAssign ( this, ScResId( RB_ASSIGN ), &aEdAssign, this ),
72 : //
73 : pViewData ( ptrViewData ),
74 0 : pDoc ( ptrViewData->GetDocument() ),
75 0 : aLocalRangeName ( *(pDoc->GetRangeName()) )
76 : {
77 0 : FreeResource();
78 :
79 0 : Point aFlFilterPt( aFlFilter.GetPosPixel() );
80 0 : aFlFilterPt.Y() += aFlFilter.GetSizePixel().Height();
81 0 : aFilterCtr.SetPosPixel( aFlFilterPt );
82 0 : MinSize=aFilterCtr.GetSizePixel();
83 0 : MinSize.Height()+=2;
84 0 : MinSize.Width()+=2;
85 0 : aOkButton.SetClickHdl(LINK( this, ScHighlightChgDlg, OKBtnHdl));
86 0 : aHighlightBox.SetClickHdl(LINK( this, ScHighlightChgDlg, HighLightHandle ));
87 0 : aFilterCtr.SetRefHdl(LINK( this, ScHighlightChgDlg, RefHandle ));
88 0 : aFilterCtr.HideRange(false);
89 0 : aFilterCtr.Show();
90 0 : SetDispatcherLock( true );
91 :
92 0 : Init();
93 :
94 0 : }
95 :
96 0 : ScHighlightChgDlg::~ScHighlightChgDlg()
97 : {
98 0 : SetDispatcherLock( false );
99 0 : }
100 :
101 0 : void ScHighlightChgDlg::Init()
102 : {
103 0 : String aAreaStr;
104 0 : ScRange aRange;
105 :
106 : OSL_ENSURE( pViewData && pDoc, "ViewData oder Document nicht gefunden!" );
107 :
108 0 : ScChangeTrack* pChanges=pDoc->GetChangeTrack();
109 0 : if(pChanges!=NULL)
110 : {
111 0 : aChangeViewSet.SetTheAuthorToShow(pChanges->GetUser());
112 0 : aFilterCtr.ClearAuthors();
113 0 : const std::set<rtl::OUString>& rUserColl = pChanges->GetUserCollection();
114 0 : std::set<rtl::OUString>::const_iterator it = rUserColl.begin(), itEnd = rUserColl.end();
115 0 : for (; it != itEnd; ++it)
116 0 : aFilterCtr.InsertAuthor(*it);
117 : }
118 :
119 :
120 0 : ScChangeViewSettings* pViewSettings=pDoc->GetChangeViewSettings();
121 :
122 0 : if(pViewSettings!=NULL)
123 0 : aChangeViewSet=*pViewSettings;
124 0 : aHighlightBox.Check(aChangeViewSet.ShowChanges());
125 0 : aFilterCtr.CheckDate(aChangeViewSet.HasDate());
126 0 : aFilterCtr.SetFirstDate(aChangeViewSet.GetTheFirstDateTime());
127 0 : aFilterCtr.SetFirstTime(aChangeViewSet.GetTheFirstDateTime());
128 0 : aFilterCtr.SetLastDate(aChangeViewSet.GetTheLastDateTime());
129 0 : aFilterCtr.SetLastTime(aChangeViewSet.GetTheLastDateTime());
130 0 : aFilterCtr.SetDateMode((sal_uInt16)aChangeViewSet.GetTheDateMode());
131 0 : aFilterCtr.CheckAuthor(aChangeViewSet.HasAuthor());
132 0 : aFilterCtr.CheckComment(aChangeViewSet.HasComment());
133 0 : aFilterCtr.SetComment(aChangeViewSet.GetTheComment());
134 :
135 0 : aCbAccept.Check(aChangeViewSet.IsShowAccepted());
136 0 : aCbReject.Check(aChangeViewSet.IsShowRejected());
137 :
138 0 : String aString=aChangeViewSet.GetTheAuthorToShow();
139 0 : if(aString.Len()!=0)
140 : {
141 0 : aFilterCtr.SelectAuthor(aString);
142 : }
143 : else
144 : {
145 0 : aFilterCtr.SelectedAuthorPos(0);
146 : }
147 :
148 0 : aFilterCtr.CheckRange(aChangeViewSet.HasRange());
149 :
150 0 : if ( !aChangeViewSet.GetTheRangeList().empty() )
151 : {
152 0 : String aRefStr;
153 0 : const ScRange* pRangeEntry = aChangeViewSet.GetTheRangeList().front();
154 0 : pRangeEntry->Format( aRefStr, ABS_DREF3D, pDoc );
155 0 : aFilterCtr.SetRange(aRefStr);
156 : }
157 0 : aFilterCtr.Enable(sal_True,sal_True);
158 0 : HighLightHandle(&aHighlightBox);
159 0 : }
160 :
161 : //----------------------------------------------------------------------------
162 : // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als
163 : // neue Selektion im Referenz-Edit angezeigt wird.
164 :
165 0 : void ScHighlightChgDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
166 : {
167 0 : if ( aEdAssign.IsVisible() )
168 : {
169 0 : if ( rRef.aStart != rRef.aEnd )
170 0 : RefInputStart(&aEdAssign);
171 0 : String aRefStr;
172 0 : rRef.Format( aRefStr, ABS_DREF3D, pDocP, pDocP->GetAddressConvention() );
173 0 : aEdAssign.SetRefString( aRefStr );
174 0 : aFilterCtr.SetRange(aRefStr);
175 : }
176 0 : }
177 :
178 : //----------------------------------------------------------------------------
179 0 : sal_Bool ScHighlightChgDlg::Close()
180 : {
181 0 : return DoClose( ScHighlightChgDlgWrapper::GetChildWindowId() );
182 : }
183 :
184 0 : void ScHighlightChgDlg::RefInputDone( sal_Bool bForced)
185 : {
186 0 : ScAnyRefDlg::RefInputDone(bForced);
187 0 : if(bForced || !aRbAssign.IsVisible())
188 : {
189 0 : aFilterCtr.SetRange(aEdAssign.GetText());
190 0 : aFilterCtr.SetFocusToRange();
191 0 : aEdAssign.Hide();
192 0 : aRbAssign.Hide();
193 : }
194 0 : }
195 :
196 0 : void ScHighlightChgDlg::SetActive()
197 : {
198 0 : }
199 :
200 0 : sal_Bool ScHighlightChgDlg::IsRefInputMode() const
201 : {
202 0 : return aEdAssign.IsVisible();
203 : }
204 :
205 0 : IMPL_LINK( ScHighlightChgDlg, HighLightHandle, CheckBox*, pCb )
206 : {
207 0 : if(pCb!=NULL)
208 : {
209 0 : if(aHighlightBox.IsChecked())
210 : {
211 0 : aFilterCtr.Enable(sal_True,sal_True);
212 0 : aCbAccept.Enable();
213 0 : aCbReject.Enable();
214 : }
215 : else
216 : {
217 0 : aFilterCtr.Disable(sal_True);
218 0 : aCbAccept.Disable();
219 0 : aCbReject.Disable();
220 : }
221 : }
222 0 : return 0;
223 : }
224 :
225 0 : IMPL_LINK( ScHighlightChgDlg, RefHandle, SvxTPFilter*, pRef )
226 : {
227 0 : if(pRef!=NULL)
228 : {
229 0 : SetDispatcherLock( true );
230 0 : aEdAssign.Show();
231 0 : aRbAssign.Show();
232 0 : aEdAssign.SetText(aFilterCtr.GetRange());
233 0 : ScAnyRefDlg::RefInputStart(&aEdAssign,&aRbAssign);
234 : }
235 0 : return 0;
236 : }
237 :
238 0 : IMPL_LINK( ScHighlightChgDlg, OKBtnHdl, PushButton*, pOKBtn )
239 : {
240 0 : if ( pOKBtn == &aOkButton)
241 : {
242 0 : aChangeViewSet.SetShowChanges(aHighlightBox.IsChecked());
243 0 : aChangeViewSet.SetHasDate(aFilterCtr.IsDate());
244 0 : ScChgsDateMode eMode = (ScChgsDateMode) aFilterCtr.GetDateMode();
245 0 : aChangeViewSet.SetTheDateMode( eMode );
246 0 : Date aFirstDate( aFilterCtr.GetFirstDate() );
247 0 : Time aFirstTime( aFilterCtr.GetFirstTime() );
248 0 : Date aLastDate( aFilterCtr.GetLastDate() );
249 0 : Time aLastTime( aFilterCtr.GetLastTime() );
250 0 : aChangeViewSet.SetTheFirstDateTime( DateTime( aFirstDate, aFirstTime ) );
251 0 : aChangeViewSet.SetTheLastDateTime( DateTime( aLastDate, aLastTime ) );
252 0 : aChangeViewSet.SetHasAuthor(aFilterCtr.IsAuthor());
253 0 : aChangeViewSet.SetTheAuthorToShow(aFilterCtr.GetSelectedAuthor());
254 0 : aChangeViewSet.SetHasRange(aFilterCtr.IsRange());
255 0 : aChangeViewSet.SetShowAccepted(aCbAccept.IsChecked());
256 0 : aChangeViewSet.SetShowRejected(aCbReject.IsChecked());
257 0 : aChangeViewSet.SetHasComment(aFilterCtr.IsComment());
258 0 : aChangeViewSet.SetTheComment(aFilterCtr.GetComment());
259 0 : ScRangeList aLocalRangeList;
260 0 : aLocalRangeList.Parse(aFilterCtr.GetRange(), pDoc);
261 0 : aChangeViewSet.SetTheRangeList(aLocalRangeList);
262 0 : aChangeViewSet.AdjustDateMode( *pDoc );
263 0 : pDoc->SetChangeViewSettings(aChangeViewSet);
264 0 : pViewData->GetDocShell()->PostPaintGridAll();
265 0 : Close();
266 : }
267 0 : return 0;
268 15 : }
269 :
270 :
271 :
272 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|