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 <vcl/dialog.hxx>
21 : #include <vcl/layout.hxx>
22 : #include <vcl/svapp.hxx>
23 : #include <sfx2/app.hxx>
24 : #include <sfx2/module.hxx>
25 : #include <unotools/textsearch.hxx>
26 : #include <svtools/svlbitm.hxx>
27 : #include "svtools/viewdataentry.hxx"
28 : #include <unotools/charclass.hxx>
29 :
30 : #include <editeng/unolingu.hxx>
31 : #include <svx/dialmgr.hxx>
32 : #include "svx/dialogs.hrc"
33 : #include <svx/ctredlin.hxx>
34 : #include "helpid.hrc"
35 :
36 : #define WRITER_DATE 2
37 : #define CALC_DATE 3
38 :
39 0 : RedlinData::RedlinData() : aDateTime(DateTime::EMPTY)
40 : {
41 0 : bDisabled=false;
42 0 : pData=NULL;
43 0 : }
44 :
45 0 : RedlinData::~RedlinData()
46 : {
47 0 : }
48 :
49 0 : SvxRedlinEntry::SvxRedlinEntry()
50 0 : : SvTreeListEntry()
51 : {
52 0 : }
53 :
54 0 : SvxRedlinEntry::~SvxRedlinEntry()
55 : {
56 0 : RedlinData* pRedDat=static_cast<RedlinData*>(GetUserData());
57 0 : delete pRedDat;
58 0 : }
59 :
60 0 : SvLBoxColorString::SvLBoxColorString(SvTreeListEntry*pEntry, sal_uInt16 nFlags, const OUString& rStr,
61 : const Color& rCol)
62 0 : : SvLBoxString(pEntry, nFlags, rStr)
63 : {
64 0 : aPrivColor=rCol;
65 0 : SetText( rStr );
66 0 : }
67 :
68 0 : SvLBoxColorString::SvLBoxColorString()
69 0 : : SvLBoxString()
70 : {
71 0 : }
72 :
73 0 : SvLBoxColorString::~SvLBoxColorString()
74 : {
75 0 : }
76 :
77 0 : SvLBoxItem* SvLBoxColorString::Create() const
78 : {
79 0 : return new SvLBoxColorString;
80 : }
81 :
82 0 : void SvLBoxColorString::Paint(const Point& rPos, SvTreeListBox& rDev, vcl::RenderContext& rRenderContext,
83 : const SvViewDataEntry* pView, const SvTreeListEntry& rEntry)
84 : {
85 0 : Color aColor = rRenderContext.GetTextColor();
86 0 : if (!pView->IsSelected())
87 : {
88 0 : rRenderContext.SetTextColor(aPrivColor);
89 : }
90 0 : SvLBoxString::Paint(rPos, rDev, rRenderContext, pView, rEntry);
91 0 : rRenderContext.SetTextColor(aColor);
92 0 : }
93 :
94 0 : SvxRedlinTable::SvxRedlinTable(SvSimpleTableContainer& rParent, WinBits nBits)
95 : : SvSimpleTable(rParent,nBits)
96 : , bIsCalc(false)
97 : , nDatePos(WRITER_DATE)
98 : , bAuthor(false)
99 : , bDate(false)
100 : , bComment(false)
101 : , nDaTiMode(SvxRedlinDateMode::BEFORE)
102 : , aDaTiFirst( DateTime::EMPTY )
103 : , aDaTiLast( DateTime::EMPTY )
104 : , aDaTiFilterFirst( DateTime::EMPTY )
105 : , aDaTiFilterLast( DateTime::EMPTY )
106 0 : , pCommentSearcher(0)
107 : {
108 0 : SetNodeDefaultImages();
109 0 : }
110 :
111 0 : SvxRedlinTable::~SvxRedlinTable()
112 : {
113 0 : disposeOnce();
114 0 : }
115 :
116 0 : void SvxRedlinTable::dispose()
117 : {
118 0 : delete pCommentSearcher;
119 0 : pCommentSearcher = NULL;
120 0 : SvSimpleTable::dispose();
121 0 : }
122 :
123 0 : sal_Int32 SvxRedlinTable::ColCompare(SvTreeListEntry* pLeft,SvTreeListEntry* pRight)
124 : {
125 0 : sal_Int32 nCompare = 0;
126 :
127 0 : if(aColCompareLink.IsSet())
128 : {
129 : SvSortData aRedlinCompare;
130 0 : aRedlinCompare.pLeft=pLeft;
131 0 : aRedlinCompare.pRight=pRight;
132 0 : nCompare = aColCompareLink.Call(&aRedlinCompare);
133 : }
134 : else
135 : {
136 0 : if(nDatePos==GetSortedCol())
137 : {
138 0 : RedlinData *pLeftData=static_cast<RedlinData *>(pLeft->GetUserData());
139 0 : RedlinData *pRightData=static_cast<RedlinData *>(pRight->GetUserData());
140 :
141 0 : if(pLeftData!=NULL && pRightData!=NULL)
142 : {
143 0 : if(pLeftData->aDateTime < pRightData->aDateTime)
144 : {
145 0 : nCompare = -1;
146 : }
147 0 : else if(pLeftData->aDateTime > pRightData->aDateTime)
148 : {
149 0 : nCompare = 1;
150 : }
151 : }
152 : else
153 0 : nCompare = SvSimpleTable::ColCompare(pLeft,pRight);
154 : }
155 : else
156 : {
157 0 : nCompare = SvSimpleTable::ColCompare(pLeft,pRight);
158 : }
159 :
160 : }
161 :
162 0 : return nCompare;
163 : }
164 0 : void SvxRedlinTable::SetCalcView(bool bFlag)
165 : {
166 0 : bIsCalc=bFlag;
167 0 : if(bFlag)
168 : {
169 0 : nDatePos=CALC_DATE;
170 : }
171 : else
172 : {
173 0 : nDatePos=WRITER_DATE;
174 : }
175 0 : }
176 :
177 0 : void SvxRedlinTable::UpdateFilterTest()
178 : {
179 0 : Date aDateMax( Date::SYSTEM );
180 0 : sal_uInt16 nYEAR=aDateMax.GetYear()+100;
181 0 : aDateMax.SetYear(nYEAR);
182 0 : Date aDateMin(1,1,1989);
183 0 : tools::Time aTMin(0);
184 0 : tools::Time aTMax(23,59,59);
185 :
186 0 : DateTime aDTMin(aDateMin);
187 0 : DateTime aDTMax(aDateMax);
188 :
189 0 : switch(nDaTiMode)
190 : {
191 : case SvxRedlinDateMode::BEFORE:
192 0 : aDaTiFilterFirst=aDTMin;
193 0 : aDaTiFilterLast=aDaTiFirst;
194 0 : break;
195 : case SvxRedlinDateMode::SAVE:
196 : case SvxRedlinDateMode::SINCE:
197 0 : aDaTiFilterFirst=aDaTiFirst;
198 0 : aDaTiFilterLast=aDTMax;
199 0 : break;
200 : case SvxRedlinDateMode::EQUAL:
201 0 : aDaTiFilterFirst=aDaTiFirst;
202 0 : aDaTiFilterLast=aDaTiFirst;
203 0 : aDaTiFilterFirst.SetTime(aTMin.GetTime());
204 0 : aDaTiFilterLast.SetTime(aTMax.GetTime());
205 0 : break;
206 : case SvxRedlinDateMode::NOTEQUAL:
207 0 : aDaTiFilterFirst=aDaTiFirst;
208 0 : aDaTiFilterLast=aDaTiFirst;
209 0 : aDaTiFilterFirst.SetTime(aTMin.GetTime());
210 0 : aDaTiFilterLast.SetTime(aTMax.GetTime());
211 0 : break;
212 : case SvxRedlinDateMode::BETWEEN:
213 0 : aDaTiFilterFirst=aDaTiFirst;
214 0 : aDaTiFilterLast=aDaTiLast;
215 0 : break;
216 : case SvxRedlinDateMode::NONE:
217 0 : break;
218 : }
219 0 : }
220 :
221 0 : void SvxRedlinTable::SetFilterDate(bool bFlag)
222 : {
223 0 : bDate=bFlag;
224 0 : }
225 :
226 0 : void SvxRedlinTable::SetDateTimeMode(SvxRedlinDateMode nMode)
227 : {
228 0 : nDaTiMode=nMode;
229 0 : }
230 :
231 0 : void SvxRedlinTable::SetFirstDate(const Date& aDate)
232 : {
233 0 : aDaTiFirst.SetDate(aDate.GetDate());
234 0 : }
235 :
236 0 : void SvxRedlinTable::SetLastDate(const Date& aDate)
237 : {
238 0 : aDaTiLast.SetDate(aDate.GetDate());
239 0 : }
240 :
241 0 : void SvxRedlinTable::SetFirstTime(const tools::Time& aTime)
242 : {
243 0 : aDaTiFirst.SetTime(aTime.GetTime());
244 0 : }
245 :
246 0 : void SvxRedlinTable::SetLastTime(const tools::Time& aTime)
247 : {
248 0 : aDaTiLast.SetTime(aTime.GetTime());
249 0 : }
250 :
251 0 : void SvxRedlinTable::SetFilterAuthor(bool bFlag)
252 : {
253 0 : bAuthor=bFlag;
254 0 : }
255 :
256 0 : void SvxRedlinTable::SetAuthor(const OUString &aString)
257 : {
258 0 : aAuthor=aString;
259 0 : }
260 :
261 0 : void SvxRedlinTable::SetFilterComment(bool bFlag)
262 : {
263 0 : bComment=bFlag;
264 0 : }
265 :
266 0 : void SvxRedlinTable::SetCommentParams( const utl::SearchParam* pSearchPara )
267 : {
268 0 : if(pSearchPara!=NULL)
269 : {
270 0 : delete pCommentSearcher;
271 :
272 0 : pCommentSearcher=new utl::TextSearch(*pSearchPara, LANGUAGE_SYSTEM );
273 : }
274 0 : }
275 :
276 0 : bool SvxRedlinTable::IsValidEntry(const OUString &rAuthorStr,
277 : const DateTime &rDateTime,
278 : const OUString &rCommentStr)
279 : {
280 0 : return IsValidEntry(rAuthorStr, rDateTime) && IsValidComment(rCommentStr);
281 : }
282 :
283 0 : bool SvxRedlinTable::IsValidEntry(const OUString &rAuthorStr, const DateTime &rDateTime)
284 : {
285 0 : if (bAuthor && aAuthor!=rAuthorStr)
286 0 : return false;
287 :
288 0 : if (!bDate)
289 0 : return true;
290 :
291 0 : const bool bRes = rDateTime.IsBetween(aDaTiFilterFirst, aDaTiFilterLast);
292 0 : return nDaTiMode!=SvxRedlinDateMode::NOTEQUAL ? bRes : !bRes;
293 : }
294 :
295 0 : bool SvxRedlinTable::IsValidComment(const OUString &rCommentStr)
296 : {
297 0 : if (!bComment)
298 0 : return true;
299 :
300 0 : sal_Int32 nStartPos = 0;
301 0 : sal_Int32 nEndPos = rCommentStr.getLength();
302 0 : return pCommentSearcher->SearchForward( rCommentStr, &nStartPos, &nEndPos);
303 : }
304 :
305 0 : SvTreeListEntry* SvxRedlinTable::InsertEntry(const OUString& rStr,
306 : RedlinData *pUserData, SvTreeListEntry* pParent, sal_uIntPtr nPos)
307 : {
308 0 : const Color aColor = (pUserData && pUserData->bDisabled) ? Color(COL_GRAY) : GetTextColor();
309 :
310 0 : return InsertEntry(rStr, pUserData, aColor, pParent, nPos);
311 : }
312 :
313 0 : SvTreeListEntry* SvxRedlinTable::InsertEntry(const OUString& rStr,
314 : RedlinData *pUserData, const Color& rColor, SvTreeListEntry* pParent, sal_uIntPtr nPos)
315 : {
316 0 : maEntryColor = rColor;
317 0 : maEntryImage = Image();
318 :
319 0 : sal_Int32 nIndex = 0;
320 0 : const OUString aFirstStr(rStr.getToken(0, '\t', nIndex));
321 0 : maEntryString = nIndex > 0 ? rStr.copy(nIndex) : OUString();
322 :
323 0 : return SvSimpleTable::InsertEntry(aFirstStr, pParent, false, nPos, pUserData);
324 : }
325 :
326 0 : SvTreeListEntry* SvxRedlinTable::InsertEntry(const Image &rRedlineType, const OUString& rStr,
327 : RedlinData *pUserData, SvTreeListEntry* pParent, sal_uIntPtr nPos)
328 : {
329 0 : maEntryColor = (pUserData && pUserData->bDisabled) ? Color(COL_GRAY) : GetTextColor();
330 0 : maEntryImage = rRedlineType;
331 0 : maEntryString = rStr;
332 :
333 0 : return SvSimpleTable::InsertEntry(OUString(), pParent, false, nPos, pUserData);
334 : }
335 :
336 0 : SvTreeListEntry* SvxRedlinTable::CreateEntry() const
337 : {
338 0 : return new SvxRedlinEntry;
339 : }
340 :
341 0 : void SvxRedlinTable::InitEntry(SvTreeListEntry* pEntry, const OUString& rStr,
342 : const Image& rColl, const Image& rExp, SvLBoxButtonKind eButtonKind)
343 : {
344 0 : if (nTreeFlags & SvTreeFlags::CHKBTN)
345 : {
346 0 : pEntry->AddItem(new SvLBoxButton(pEntry, eButtonKind, 0, pCheckButtonData));
347 : }
348 :
349 0 : pEntry->AddItem(new SvLBoxContextBmp(pEntry, 0, rColl, rExp, true));
350 :
351 : // the type of the change
352 : assert((rStr.isEmpty() && !!maEntryImage) || (!rStr.isEmpty() && !maEntryImage));
353 :
354 0 : if (rStr.isEmpty())
355 0 : pEntry->AddItem(new SvLBoxContextBmp(pEntry, 0, maEntryImage, maEntryImage, true));
356 : else
357 0 : pEntry->AddItem(new SvLBoxColorString(pEntry, 0, rStr, maEntryColor));
358 :
359 : // the change tracking entries
360 0 : sal_Int32 nIndex = 0;
361 0 : const sal_uInt16 nCount = TabCount() - 1;
362 0 : for (sal_uInt16 nToken = 0; nToken < nCount; nToken++)
363 : {
364 0 : const OUString aToken = GetToken(maEntryString, nIndex);
365 0 : pEntry->AddItem(new SvLBoxColorString(pEntry, 0, aToken, maEntryColor));
366 0 : }
367 0 : }
368 :
369 0 : SvxTPView::SvxTPView(vcl::Window *pParent, VclBuilderContainer *pTopLevel)
370 : : TabPage(pParent, "RedlineViewPage", "svx/ui/redlineviewpage.ui")
371 : , bEnableAccept(true)
372 : , bEnableAcceptAll(true)
373 : , bEnableReject(true)
374 : , bEnableRejectAll(true)
375 0 : , bEnableUndo(true)
376 : {
377 0 : pTopLevel->get(m_pAccept, "accept");
378 0 : pTopLevel->get(m_pReject, "reject");
379 0 : pTopLevel->get(m_pAcceptAll, "acceptall");
380 0 : pTopLevel->get(m_pRejectAll, "rejectall");
381 0 : pTopLevel->get(m_pUndo, "undo");
382 :
383 0 : SvSimpleTableContainer* pTable = get<SvSimpleTableContainer>("changes");
384 0 : Size aControlSize(80, 65);
385 0 : aControlSize = LogicToPixel(aControlSize, MAP_APPFONT);
386 0 : pTable->set_width_request(aControlSize.Width());
387 0 : pTable->set_height_request(aControlSize.Height());
388 0 : m_pViewData = VclPtr<SvxRedlinTable>::Create(*pTable, 0);
389 :
390 0 : Link<> aLink=LINK( this, SvxTPView, PbClickHdl);
391 :
392 0 : m_pAccept->SetClickHdl(aLink);
393 0 : m_pAcceptAll->SetClickHdl(aLink);
394 0 : m_pReject->SetClickHdl(aLink);
395 0 : m_pRejectAll->SetClickHdl(aLink);
396 0 : m_pUndo->SetClickHdl(aLink);
397 0 : }
398 :
399 0 : void SvxTPView::ActivatePage()
400 : {
401 0 : m_pAccept->Enable(bEnableAccept);
402 0 : m_pReject->Enable(bEnableReject);
403 0 : m_pAcceptAll->Enable(bEnableAcceptAll);
404 0 : m_pRejectAll->Enable(bEnableRejectAll);
405 0 : m_pUndo->Enable(bEnableUndo);
406 0 : TabPage::ActivatePage();
407 0 : }
408 :
409 0 : void SvxTPView::DeactivatePage()
410 : {
411 0 : TabPage::DeactivatePage();
412 0 : m_pAccept->Disable();
413 0 : m_pReject->Disable();
414 0 : m_pAcceptAll->Disable();
415 0 : m_pRejectAll->Disable();
416 0 : m_pUndo->Disable();
417 0 : }
418 :
419 0 : SvxTPView::~SvxTPView()
420 : {
421 0 : disposeOnce();
422 0 : }
423 :
424 0 : void SvxTPView::dispose()
425 : {
426 0 : m_pViewData.disposeAndClear();
427 0 : m_pAccept.clear();
428 0 : m_pReject.clear();
429 0 : m_pAcceptAll.clear();
430 0 : m_pRejectAll.clear();
431 0 : m_pUndo.clear();
432 0 : TabPage::dispose();
433 0 : }
434 :
435 0 : void SvxTPView::InsertWriterHeader()
436 : {
437 0 : const long pTabs[] = { 5, 10, 20, 70, 120, 170 };
438 0 : m_pViewData->SetTabs(pTabs);
439 :
440 0 : OUString aStrTab('\t');
441 0 : OUString aString(get<FixedText>("action")->GetText());
442 0 : aString += aStrTab;
443 0 : aString += get<FixedText>("author")->GetText();
444 0 : aString += aStrTab;
445 0 : aString += get<FixedText>("date")->GetText();
446 0 : aString += aStrTab;
447 0 : aString += get<FixedText>("comment")->GetText();
448 0 : m_pViewData->ClearHeader();
449 0 : m_pViewData->InsertHeaderEntry(aString);
450 0 : }
451 :
452 0 : void SvxTPView::InsertCalcHeader()
453 : {
454 0 : const long pTabs[] = { 5, 10, 65, 120, 170, 220 };
455 0 : m_pViewData->SetTabs(pTabs);
456 :
457 0 : OUString aStrTab('\t');
458 0 : OUString aString(get<FixedText>("action")->GetText());
459 0 : aString += aStrTab;
460 0 : aString += get<FixedText>("position")->GetText();
461 0 : aString += aStrTab;
462 0 : aString += get<FixedText>("author")->GetText();
463 0 : aString += aStrTab;
464 0 : aString += get<FixedText>("date")->GetText();
465 0 : aString += aStrTab;
466 0 : aString += get<FixedText>("comment")->GetText();
467 0 : m_pViewData->ClearHeader();
468 0 : m_pViewData->InsertHeaderEntry(aString);
469 0 : }
470 :
471 0 : void SvxTPView::EnableAccept(bool nFlag)
472 : {
473 0 : bEnableAccept = nFlag;
474 0 : m_pAccept->Enable(nFlag);
475 0 : }
476 :
477 0 : void SvxTPView::EnableAcceptAll(bool nFlag)
478 : {
479 0 : bEnableAcceptAll = nFlag;
480 0 : m_pAcceptAll->Enable(nFlag);
481 0 : }
482 :
483 0 : void SvxTPView::EnableReject(bool nFlag)
484 : {
485 0 : bEnableReject = nFlag;
486 0 : m_pReject->Enable(nFlag);
487 0 : }
488 :
489 0 : void SvxTPView::EnableRejectAll(bool nFlag)
490 : {
491 0 : bEnableRejectAll = nFlag;
492 0 : m_pRejectAll->Enable(nFlag);
493 0 : }
494 :
495 0 : void SvxTPView::ShowUndo(bool nFlag)
496 : {
497 0 : m_pUndo->Show(nFlag);
498 0 : }
499 :
500 0 : void SvxTPView::EnableUndo(bool nFlag)
501 : {
502 0 : bEnableUndo = nFlag;
503 0 : m_pUndo->Enable(nFlag);
504 0 : }
505 :
506 :
507 0 : IMPL_LINK( SvxTPView, PbClickHdl, PushButton*, pPushB )
508 : {
509 0 : if (pPushB == m_pAccept)
510 : {
511 0 : AcceptClickLk.Call(this);
512 : }
513 0 : else if (pPushB == m_pAcceptAll)
514 : {
515 0 : AcceptAllClickLk.Call(this);
516 : }
517 0 : else if (pPushB == m_pReject)
518 : {
519 0 : RejectClickLk.Call(this);
520 : }
521 0 : else if (pPushB == m_pRejectAll)
522 : {
523 0 : RejectAllClickLk.Call(this);
524 : }
525 0 : else if (pPushB == m_pUndo)
526 : {
527 0 : UndoClickLk.Call(this);
528 : }
529 :
530 0 : return 0;
531 : }
532 :
533 0 : SvxTPFilter::SvxTPFilter( vcl::Window * pParent)
534 : : TabPage(pParent, "RedlineFilterPage", "svx/ui/redlinefilterpage.ui")
535 : , pRedlinTable(NULL)
536 0 : , bModified(false)
537 : {
538 0 : get(m_pCbDate, "date");
539 0 : get(m_pLbDate, "datecond");
540 0 : get(m_pDfDate, "startdate");
541 0 : get(m_pTfDate, "starttime");
542 0 : get(m_pIbClock, "startclock");
543 0 : get(m_pFtDate2, "and");
544 0 : get(m_pDfDate2, "enddate");
545 0 : get(m_pTfDate2, "endtime");
546 0 : get(m_pIbClock2, "endclock");
547 0 : get(m_pCbAuthor, "author");
548 0 : get(m_pLbAuthor, "authorlist");
549 0 : get(m_pCbRange, "range");
550 0 : get(m_pEdRange, "rangeedit");
551 0 : get(m_pBtnRange, "dotdotdot");
552 0 : get(m_pCbAction, "action");
553 0 : get(m_pLbAction, "actionlist");
554 0 : get(m_pCbComment, "comment");
555 0 : get(m_pEdComment, "commentedit");
556 :
557 0 : m_pLbAuthor->SetAccessibleName(m_pCbAuthor->GetText());
558 0 : m_pEdComment->SetAccessibleName(m_pCbComment->GetText());
559 :
560 0 : m_pDfDate->SetShowDateCentury( true );
561 0 : m_pDfDate2->SetShowDateCentury( true );
562 :
563 0 : m_pLbDate->SelectEntryPos(0);
564 0 : m_pLbDate->SetSelectHdl( LINK( this, SvxTPFilter, SelDateHdl ) );
565 0 : m_pIbClock->SetClickHdl( LINK( this, SvxTPFilter, TimeHdl) );
566 0 : m_pIbClock2->SetClickHdl( LINK( this, SvxTPFilter,TimeHdl) );
567 0 : m_pBtnRange->SetClickHdl( LINK( this, SvxTPFilter, RefHandle));
568 :
569 0 : Link<> aLink=LINK( this, SvxTPFilter, RowEnableHdl) ;
570 0 : m_pCbDate->SetClickHdl(aLink);
571 0 : m_pCbAuthor->SetClickHdl(aLink);
572 0 : m_pCbRange->SetClickHdl(aLink);
573 0 : m_pCbAction->SetClickHdl(aLink);
574 0 : m_pCbComment->SetClickHdl(aLink);
575 :
576 0 : Link<> a2Link=LINK( this, SvxTPFilter, ModifyDate);
577 0 : m_pDfDate->SetModifyHdl(a2Link);
578 0 : m_pTfDate->SetModifyHdl(a2Link);
579 0 : m_pDfDate2->SetModifyHdl(a2Link);
580 0 : m_pTfDate2->SetModifyHdl(a2Link);
581 :
582 0 : Link<> a3Link=LINK( this, SvxTPFilter, ModifyHdl);
583 0 : m_pEdRange->SetModifyHdl(a3Link);
584 0 : m_pEdComment->SetModifyHdl(a3Link);
585 0 : m_pLbAction->SetSelectHdl(a3Link);
586 0 : m_pLbAuthor->SetSelectHdl(a3Link);
587 :
588 0 : RowEnableHdl(m_pCbDate);
589 0 : RowEnableHdl(m_pCbAuthor);
590 0 : RowEnableHdl(m_pCbRange);
591 0 : RowEnableHdl(m_pCbAction);
592 0 : RowEnableHdl(m_pCbComment);
593 :
594 0 : Date aDate( Date::SYSTEM );
595 0 : tools::Time aTime( tools::Time::SYSTEM );
596 0 : m_pDfDate->SetDate(aDate);
597 0 : m_pTfDate->SetTime(aTime);
598 0 : m_pDfDate2->SetDate(aDate);
599 0 : m_pTfDate2->SetTime(aTime);
600 0 : HideRange();
601 0 : ShowAction();
602 0 : bModified=false;
603 0 : }
604 :
605 0 : SvxTPFilter::~SvxTPFilter()
606 : {
607 0 : disposeOnce();
608 0 : }
609 :
610 0 : void SvxTPFilter::dispose()
611 : {
612 0 : pRedlinTable.clear();
613 0 : m_pCbDate.clear();
614 0 : m_pLbDate.clear();
615 0 : m_pDfDate.clear();
616 0 : m_pTfDate.clear();
617 0 : m_pIbClock.clear();
618 0 : m_pFtDate2.clear();
619 0 : m_pDfDate2.clear();
620 0 : m_pTfDate2.clear();
621 0 : m_pIbClock2.clear();
622 0 : m_pCbAuthor.clear();
623 0 : m_pLbAuthor.clear();
624 0 : m_pCbRange.clear();
625 0 : m_pEdRange.clear();
626 0 : m_pBtnRange.clear();
627 0 : m_pCbAction.clear();
628 0 : m_pLbAction.clear();
629 0 : m_pCbComment.clear();
630 0 : m_pEdComment.clear();
631 0 : TabPage::dispose();
632 0 : }
633 :
634 0 : void SvxTPFilter::SetRedlinTable(SvxRedlinTable* pTable)
635 : {
636 0 : pRedlinTable=pTable;
637 0 : }
638 :
639 0 : void SvxTPFilter::ShowDateFields(SvxRedlinDateMode nKind)
640 : {
641 0 : switch(nKind)
642 : {
643 : case SvxRedlinDateMode::BEFORE:
644 0 : EnableDateLine1(true);
645 0 : EnableDateLine2(false);
646 0 : break;
647 : case SvxRedlinDateMode::SINCE:
648 0 : EnableDateLine1(true);
649 0 : EnableDateLine2(false);
650 0 : break;
651 : case SvxRedlinDateMode::EQUAL:
652 0 : EnableDateLine1(true);
653 0 : m_pTfDate->Disable();
654 0 : m_pTfDate->SetText(OUString());
655 0 : EnableDateLine2(false);
656 0 : break;
657 : case SvxRedlinDateMode::NOTEQUAL:
658 0 : EnableDateLine1(true);
659 0 : m_pTfDate->Disable();
660 0 : m_pTfDate->SetText(OUString());
661 0 : EnableDateLine2(false);
662 0 : break;
663 : case SvxRedlinDateMode::BETWEEN:
664 0 : EnableDateLine1(true);
665 0 : EnableDateLine2(true);
666 0 : break;
667 : case SvxRedlinDateMode::SAVE:
668 0 : EnableDateLine1(false);
669 0 : EnableDateLine2(false);
670 0 : break;
671 : case SvxRedlinDateMode::NONE:
672 0 : break;
673 : }
674 0 : }
675 :
676 0 : void SvxTPFilter::EnableDateLine1(bool bFlag)
677 : {
678 0 : if(bFlag && m_pCbDate->IsChecked())
679 : {
680 0 : m_pDfDate->Enable();
681 0 : m_pTfDate->Enable();
682 0 : m_pIbClock->Enable();
683 : }
684 : else
685 : {
686 0 : m_pDfDate->Disable();
687 0 : m_pTfDate->Disable();
688 0 : m_pIbClock->Disable();
689 : }
690 0 : }
691 0 : void SvxTPFilter::EnableDateLine2(bool bFlag)
692 : {
693 0 : if(bFlag && m_pCbDate->IsChecked())
694 : {
695 0 : m_pFtDate2->Enable();
696 0 : m_pDfDate2->Enable();
697 0 : m_pTfDate2->Enable();
698 0 : m_pIbClock2->Enable();
699 : }
700 : else
701 : {
702 0 : m_pFtDate2->Disable();
703 0 : m_pDfDate2->Disable();
704 0 : m_pDfDate2->SetText(OUString());
705 0 : m_pTfDate2->Disable();
706 0 : m_pTfDate2->SetText(OUString());
707 0 : m_pIbClock2->Disable();
708 : }
709 0 : }
710 :
711 0 : Date SvxTPFilter::GetFirstDate() const
712 : {
713 0 : return m_pDfDate->GetDate();
714 : }
715 :
716 0 : void SvxTPFilter::SetFirstDate(const Date &aDate)
717 : {
718 0 : m_pDfDate->SetDate(aDate);
719 0 : }
720 :
721 0 : tools::Time SvxTPFilter::GetFirstTime() const
722 : {
723 0 : return m_pTfDate->GetTime();
724 : }
725 :
726 0 : void SvxTPFilter::SetFirstTime(const tools::Time &aTime)
727 : {
728 0 : m_pTfDate->SetTime(aTime);
729 0 : }
730 :
731 :
732 0 : Date SvxTPFilter::GetLastDate() const
733 : {
734 0 : return m_pDfDate2->GetDate();
735 : }
736 :
737 0 : void SvxTPFilter::SetLastDate(const Date &aDate)
738 : {
739 0 : m_pDfDate2->SetDate(aDate);
740 0 : }
741 :
742 0 : tools::Time SvxTPFilter::GetLastTime() const
743 : {
744 0 : return m_pTfDate2->GetTime();
745 : }
746 :
747 0 : void SvxTPFilter::SetLastTime(const tools::Time &aTime)
748 : {
749 0 : m_pTfDate2->SetTime(aTime);
750 0 : }
751 :
752 0 : void SvxTPFilter::SetDateMode(sal_uInt16 nMode)
753 : {
754 0 : m_pLbDate->SelectEntryPos(nMode);
755 0 : SelDateHdl(m_pLbDate);
756 0 : }
757 :
758 0 : SvxRedlinDateMode SvxTPFilter::GetDateMode()
759 : {
760 0 : return static_cast<SvxRedlinDateMode>(m_pLbDate->GetSelectEntryPos());
761 : }
762 0 : void SvxTPFilter::ClearAuthors()
763 : {
764 0 : m_pLbAuthor->Clear();
765 0 : }
766 :
767 0 : void SvxTPFilter::InsertAuthor( const OUString& rString, sal_Int32 nPos)
768 : {
769 0 : m_pLbAuthor->InsertEntry(rString,nPos);
770 0 : }
771 :
772 0 : OUString SvxTPFilter::GetSelectedAuthor() const
773 : {
774 0 : return m_pLbAuthor->GetSelectEntry();
775 : }
776 :
777 0 : void SvxTPFilter::SelectedAuthorPos(sal_Int32 nPos)
778 : {
779 0 : m_pLbAuthor->SelectEntryPos(nPos);
780 0 : }
781 :
782 0 : sal_Int32 SvxTPFilter::SelectAuthor(const OUString& aString)
783 : {
784 0 : m_pLbAuthor->SelectEntry(aString);
785 0 : return m_pLbAuthor->GetSelectEntryPos();
786 : }
787 :
788 0 : void SvxTPFilter::SetRange(const OUString& rString)
789 : {
790 0 : m_pEdRange->SetText(rString);
791 0 : }
792 :
793 0 : OUString SvxTPFilter::GetRange() const
794 : {
795 0 : return m_pEdRange->GetText();
796 : }
797 :
798 0 : void SvxTPFilter::SetFocusToRange()
799 : {
800 0 : m_pEdRange->GrabFocus();
801 0 : }
802 :
803 0 : void SvxTPFilter::HideRange(bool bHide)
804 : {
805 0 : if (bHide)
806 : {
807 0 : m_pCbRange->Hide();
808 0 : m_pEdRange->Hide();
809 0 : m_pBtnRange->Hide();
810 : }
811 : else
812 : {
813 0 : ShowAction(false);
814 0 : m_pCbRange->Show();
815 0 : m_pEdRange->Show();
816 0 : m_pBtnRange->Show();
817 : }
818 0 : }
819 :
820 0 : void SvxTPFilter::SetComment(const OUString &rComment)
821 : {
822 0 : m_pEdComment->SetText(rComment);
823 0 : }
824 :
825 0 : OUString SvxTPFilter::GetComment()const
826 : {
827 0 : return m_pEdComment->GetText();
828 : }
829 :
830 0 : bool SvxTPFilter::IsDate()
831 : {
832 0 : return m_pCbDate->IsChecked();
833 : }
834 :
835 0 : bool SvxTPFilter::IsAuthor()
836 : {
837 0 : return m_pCbAuthor->IsChecked();
838 : }
839 :
840 0 : bool SvxTPFilter::IsRange()
841 : {
842 0 : return m_pCbRange->IsChecked();
843 : }
844 :
845 0 : bool SvxTPFilter::IsAction()
846 : {
847 0 : return m_pCbAction->IsChecked();
848 : }
849 :
850 0 : bool SvxTPFilter::IsComment()
851 : {
852 0 : return m_pCbComment->IsChecked();
853 : }
854 :
855 0 : void SvxTPFilter::CheckDate(bool bFlag)
856 : {
857 0 : m_pCbDate->Check(bFlag);
858 0 : RowEnableHdl(m_pCbDate);
859 0 : bModified=false;
860 0 : }
861 :
862 0 : void SvxTPFilter::CheckAuthor(bool bFlag)
863 : {
864 0 : m_pCbAuthor->Check(bFlag);
865 0 : RowEnableHdl(m_pCbAuthor);
866 0 : bModified=false;
867 0 : }
868 :
869 0 : void SvxTPFilter::CheckRange(bool bFlag)
870 : {
871 0 : m_pCbRange->Check(bFlag);
872 0 : RowEnableHdl(m_pCbRange);
873 0 : bModified=false;
874 0 : }
875 :
876 0 : void SvxTPFilter::CheckAction(bool bFlag)
877 : {
878 0 : m_pCbAction->Check(bFlag);
879 0 : RowEnableHdl(m_pCbAction);
880 0 : bModified=false;
881 0 : }
882 :
883 0 : void SvxTPFilter::CheckComment(bool bFlag)
884 : {
885 0 : m_pCbComment->Check(bFlag);
886 0 : RowEnableHdl(m_pCbComment);
887 0 : bModified=false;
888 0 : }
889 :
890 0 : void SvxTPFilter::ShowAction(bool bShow)
891 : {
892 0 : if(!bShow)
893 : {
894 0 : m_pCbAction->Hide();
895 0 : m_pLbAction->Hide();
896 : }
897 : else
898 : {
899 0 : HideRange();
900 0 : m_pCbAction->Show();
901 0 : m_pLbAction->Show();
902 : }
903 0 : }
904 :
905 :
906 0 : IMPL_LINK( SvxTPFilter, SelDateHdl, ListBox*, pLb )
907 : {
908 0 : ShowDateFields(static_cast<SvxRedlinDateMode>(m_pLbDate->GetSelectEntryPos()));
909 0 : ModifyHdl(pLb);
910 0 : return 0;
911 : }
912 :
913 0 : IMPL_LINK( SvxTPFilter, RowEnableHdl, CheckBox*, pCB )
914 : {
915 0 : if (pCB == m_pCbDate)
916 : {
917 0 : m_pLbDate->Enable(m_pCbDate->IsChecked());
918 0 : m_pLbDate->Invalidate();
919 0 : EnableDateLine1(false);
920 0 : EnableDateLine2(false);
921 0 : if(m_pCbDate->IsChecked()) SelDateHdl(m_pLbDate);
922 : }
923 0 : else if (pCB == m_pCbAuthor)
924 : {
925 0 : m_pLbAuthor->Enable(m_pCbAuthor->IsChecked());
926 0 : m_pLbAuthor->Invalidate();
927 : }
928 0 : else if (pCB == m_pCbRange)
929 : {
930 0 : m_pEdRange->Enable(m_pCbRange->IsChecked());
931 0 : m_pBtnRange->Enable(m_pCbRange->IsChecked());
932 : }
933 0 : else if (pCB == m_pCbAction)
934 : {
935 0 : m_pLbAction->Enable(m_pCbAction->IsChecked());
936 0 : m_pLbAction->Invalidate();
937 : }
938 0 : else if (pCB == m_pCbComment)
939 : {
940 0 : m_pEdComment->Enable(m_pCbComment->IsChecked());
941 0 : m_pEdComment->Invalidate();
942 : }
943 :
944 0 : ModifyHdl(pCB);
945 0 : return 0;
946 : }
947 :
948 0 : IMPL_LINK( SvxTPFilter, TimeHdl, ImageButton*,pIB )
949 : {
950 0 : Date aDate( Date::SYSTEM );
951 0 : tools::Time aTime( tools::Time::SYSTEM );
952 0 : if (pIB == m_pIbClock)
953 : {
954 0 : m_pDfDate->SetDate(aDate);
955 0 : m_pTfDate->SetTime(aTime);
956 : }
957 0 : else if (pIB == m_pIbClock2)
958 : {
959 0 : m_pDfDate2->SetDate(aDate);
960 0 : m_pTfDate2->SetTime(aTime);
961 : }
962 0 : ModifyHdl(m_pDfDate);
963 0 : return 0;
964 : }
965 :
966 0 : IMPL_LINK( SvxTPFilter, ModifyHdl, void*, pCtr)
967 : {
968 0 : if(pCtr!=NULL)
969 : {
970 0 : if (pCtr == m_pCbDate || pCtr == m_pLbDate ||
971 0 : pCtr == m_pDfDate || pCtr == m_pTfDate ||
972 0 : pCtr == m_pIbClock || pCtr == m_pFtDate2 ||
973 0 : pCtr == m_pDfDate2 || pCtr == m_pTfDate2 ||
974 0 : pCtr == m_pIbClock2)
975 : {
976 0 : aModifyDateLink.Call(this);
977 : }
978 0 : else if (pCtr == m_pCbAuthor || pCtr == m_pLbAuthor)
979 : {
980 0 : aModifyAuthorLink.Call(this);
981 : }
982 0 : else if (pCtr == m_pCbRange || pCtr == m_pLbAction || pCtr == m_pEdRange ||
983 0 : pCtr == m_pBtnRange)
984 : {
985 0 : aModifyRefLink.Call(this);
986 : }
987 0 : else if (pCtr == m_pCbComment || pCtr == m_pEdComment)
988 : {
989 0 : aModifyComLink.Call(this);
990 : }
991 :
992 0 : bModified=true;
993 0 : aModifyLink.Call(this);
994 : }
995 0 : return 0;
996 : }
997 :
998 0 : void SvxTPFilter::DeactivatePage()
999 : {
1000 0 : if(bModified)
1001 : {
1002 0 : if(pRedlinTable!=nullptr)
1003 : {
1004 0 : pRedlinTable->SetFilterDate(IsDate());
1005 0 : pRedlinTable->SetDateTimeMode(GetDateMode());
1006 0 : pRedlinTable->SetFirstDate(m_pDfDate->GetDate());
1007 0 : pRedlinTable->SetLastDate(m_pDfDate2->GetDate());
1008 0 : pRedlinTable->SetFirstTime(m_pTfDate->GetTime());
1009 0 : pRedlinTable->SetLastTime(m_pTfDate2->GetTime());
1010 0 : pRedlinTable->SetFilterAuthor(IsAuthor());
1011 0 : pRedlinTable->SetAuthor(GetSelectedAuthor());
1012 :
1013 0 : pRedlinTable->SetFilterComment(IsComment());
1014 :
1015 0 : utl::SearchParam aSearchParam( m_pEdComment->GetText(),
1016 0 : utl::SearchParam::SRCH_REGEXP,false,false,false );
1017 :
1018 0 : pRedlinTable->SetCommentParams(&aSearchParam);
1019 :
1020 0 : pRedlinTable->UpdateFilterTest();
1021 : }
1022 :
1023 0 : aReadyLink.Call(this);
1024 : }
1025 0 : bModified=false;
1026 0 : TabPage::DeactivatePage();
1027 0 : }
1028 :
1029 0 : void SvxTPFilter::Enable( bool bEnable, bool bChild)
1030 : {
1031 0 : TabPage::Enable(bEnable,bChild);
1032 0 : if(m_pCbDate->IsEnabled())
1033 : {
1034 0 : RowEnableHdl(m_pCbDate);
1035 0 : RowEnableHdl(m_pCbAuthor);
1036 0 : RowEnableHdl(m_pCbRange);
1037 0 : RowEnableHdl(m_pCbComment);
1038 : }
1039 0 : }
1040 0 : void SvxTPFilter::Disable( bool bChild)
1041 : {
1042 0 : Enable( false, bChild );
1043 0 : }
1044 :
1045 0 : IMPL_LINK( SvxTPFilter, ModifyDate, void*,pTF)
1046 : {
1047 :
1048 0 : Date aDate( Date::SYSTEM );
1049 0 : tools::Time aTime(0);
1050 0 : if (m_pDfDate==pTF)
1051 : {
1052 0 : if(m_pDfDate->GetText().isEmpty())
1053 0 : m_pDfDate->SetDate(aDate);
1054 :
1055 0 : if(pRedlinTable!=nullptr)
1056 0 : pRedlinTable->SetFirstDate(m_pDfDate->GetDate());
1057 : }
1058 0 : else if (m_pDfDate2==pTF)
1059 : {
1060 0 : if(m_pDfDate2->GetText().isEmpty())
1061 0 : m_pDfDate2->SetDate(aDate);
1062 :
1063 0 : if(pRedlinTable!=nullptr)
1064 0 : pRedlinTable->SetLastDate(m_pDfDate2->GetDate());
1065 : }
1066 0 : else if (m_pTfDate==pTF)
1067 : {
1068 0 : if(m_pTfDate->GetText().isEmpty())
1069 0 : m_pTfDate->SetTime(aTime);
1070 :
1071 0 : if(pRedlinTable!=nullptr)
1072 0 : pRedlinTable->SetFirstTime(m_pTfDate->GetTime());
1073 : }
1074 0 : else if (m_pTfDate2==pTF)
1075 : {
1076 0 : if(m_pTfDate2->GetText().isEmpty())
1077 0 : m_pTfDate2->SetTime(aTime);
1078 :
1079 0 : if(pRedlinTable!=nullptr)
1080 0 : pRedlinTable->SetLastTime(m_pTfDate2->GetTime());
1081 :
1082 : }
1083 0 : ModifyHdl(m_pDfDate);
1084 0 : return 0;
1085 : }
1086 :
1087 0 : IMPL_LINK( SvxTPFilter, RefHandle, PushButton*, pRef )
1088 : {
1089 0 : if(pRef!=NULL)
1090 : {
1091 0 : aRefLink.Call(this);
1092 : }
1093 0 : return 0;
1094 : }
1095 :
1096 0 : SvxAcceptChgCtr::SvxAcceptChgCtr(vcl::Window* pParent, VclBuilderContainer* pTopLevel)
1097 0 : : TabControl(pParent, WB_TABSTOP | WB_DIALOGCONTROL)
1098 : {
1099 0 : m_pUIBuilder = new VclBuilder(this, getUIRootDir(), "svx/ui/redlinecontrol.ui", "RedlineControl");
1100 :
1101 0 : pTPFilter = VclPtr<SvxTPFilter>::Create(this);
1102 0 : pTPView = VclPtr<SvxTPView>::Create(this, pTopLevel);
1103 :
1104 0 : m_nViewPageId = GetPageId("view");
1105 0 : m_nFilterPageId = GetPageId("filter");
1106 0 : SetTabPage(m_nViewPageId, pTPView);
1107 0 : SetTabPage(m_nFilterPageId, pTPFilter);
1108 :
1109 0 : pTPFilter->SetRedlinTable(GetViewTable());
1110 :
1111 0 : ShowViewPage();
1112 :
1113 0 : Show();
1114 0 : }
1115 :
1116 0 : SvxAcceptChgCtr::~SvxAcceptChgCtr()
1117 : {
1118 0 : disposeOnce();
1119 0 : }
1120 :
1121 0 : void SvxAcceptChgCtr::dispose()
1122 : {
1123 0 : disposeBuilder();
1124 0 : pTPView.disposeAndClear();
1125 0 : pTPFilter.disposeAndClear();
1126 0 : TabControl::dispose();
1127 0 : }
1128 :
1129 0 : void SvxAcceptChgCtr::ShowFilterPage()
1130 : {
1131 0 : SetCurPageId(m_nFilterPageId);
1132 0 : }
1133 :
1134 0 : void SvxAcceptChgCtr::ShowViewPage()
1135 : {
1136 0 : SetCurPageId(m_nViewPageId);
1137 0 : }
1138 :
1139 0 : SvxRedlinTable* SvxAcceptChgCtr::GetViewTable()
1140 : {
1141 0 : return pTPView ? pTPView->GetTableControl() : NULL;
1142 390 : }
1143 :
1144 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|