File: | home/maarten/src/libreoffice/core/sc/source/ui/miscdlgs/redcom.cxx |
Warning: | line 139, column 23 Called C++ object pointer is null |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
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 <unotools/localedatawrapper.hxx> | |||
21 | ||||
22 | #include <chgtrack.hxx> | |||
23 | #include <redcom.hxx> | |||
24 | #include <docsh.hxx> | |||
25 | #include <dbfunc.hxx> | |||
26 | #include <tabview.hxx> | |||
27 | #include <viewutil.hxx> | |||
28 | #include <svx/svxdlg.hxx> | |||
29 | ||||
30 | ScRedComDialog::ScRedComDialog( weld::Window* pParent, const SfxItemSet& rCoreSet, | |||
31 | ScDocShell *pShell, ScChangeAction *pAction, bool bPrevNext) | |||
32 | : pChangeAction(nullptr) | |||
33 | , pDocShell(nullptr) | |||
34 | , pDlg(nullptr) | |||
35 | { | |||
36 | SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); | |||
37 | pDlg = pFact->CreateSvxPostItDialog( pParent, rCoreSet, bPrevNext ); | |||
38 | pDocShell=pShell; | |||
39 | pDlg->DontChangeAuthor(); | |||
40 | pDlg->HideAuthor(); | |||
41 | ||||
42 | pDlg->SetPrevHdl(LINK( this, ScRedComDialog, PrevHdl)::tools::detail::makeLink( ::tools::detail::castTo<ScRedComDialog *>(this), &ScRedComDialog::LinkStubPrevHdl)); | |||
43 | pDlg->SetNextHdl(LINK( this, ScRedComDialog, NextHdl)::tools::detail::makeLink( ::tools::detail::castTo<ScRedComDialog *>(this), &ScRedComDialog::LinkStubNextHdl)); | |||
44 | ||||
45 | ReInit(pAction); | |||
46 | } | |||
47 | ||||
48 | ScRedComDialog::~ScRedComDialog() | |||
49 | { | |||
50 | pDlg.disposeAndClear(); | |||
51 | } | |||
52 | ||||
53 | ScChangeAction *ScRedComDialog::FindPrev(ScChangeAction *pAction) | |||
54 | { | |||
55 | if(pAction!=nullptr && pDocShell !=nullptr) | |||
56 | { | |||
57 | ScDocument& rDoc = pDocShell->GetDocument(); | |||
58 | ScChangeViewSettings* pSettings = rDoc.GetChangeViewSettings(); | |||
59 | ||||
60 | pAction=pAction->GetPrev(); | |||
61 | ||||
62 | while(pAction!=nullptr) | |||
63 | { | |||
64 | if( pAction->GetState()==SC_CAS_VIRGIN && | |||
65 | pAction->IsDialogRoot() && | |||
66 | ScViewUtil::IsActionShown(*pAction,*pSettings,rDoc)) break; | |||
67 | ||||
68 | pAction=pAction->GetPrev(); | |||
69 | } | |||
70 | } | |||
71 | return pAction; | |||
72 | } | |||
73 | ||||
74 | ScChangeAction *ScRedComDialog::FindNext(ScChangeAction *pAction) | |||
75 | { | |||
76 | if(pAction!=nullptr && pDocShell !=nullptr) | |||
77 | { | |||
78 | ScDocument& rDoc = pDocShell->GetDocument(); | |||
79 | ScChangeViewSettings* pSettings = rDoc.GetChangeViewSettings(); | |||
80 | ||||
81 | pAction=pAction->GetNext(); | |||
82 | ||||
83 | while(pAction!=nullptr) | |||
84 | { | |||
85 | if( pAction->GetState()==SC_CAS_VIRGIN && | |||
86 | pAction->IsDialogRoot() && | |||
87 | ScViewUtil::IsActionShown(*pAction,*pSettings,rDoc)) break; | |||
88 | ||||
89 | pAction=pAction->GetNext(); | |||
90 | } | |||
91 | } | |||
92 | return pAction; | |||
93 | } | |||
94 | ||||
95 | void ScRedComDialog::ReInit(ScChangeAction *pAction) | |||
96 | { | |||
97 | pChangeAction=pAction; | |||
98 | if(pChangeAction==nullptr || pDocShell ==nullptr) | |||
99 | return; | |||
100 | ||||
101 | OUString aTitle; | |||
102 | pChangeAction->GetDescription(aTitle, pDocShell->GetDocument()); | |||
103 | pDlg->SetText(aTitle); | |||
104 | aComment=pChangeAction->GetComment(); | |||
105 | ||||
106 | bool bNext=FindNext(pChangeAction)!=nullptr; | |||
107 | bool bPrev=FindPrev(pChangeAction)!=nullptr; | |||
108 | pDlg->EnableTravel(bNext,bPrev); | |||
109 | ||||
110 | OUString aAuthor = pChangeAction->GetUser(); | |||
111 | ||||
112 | DateTime aDT = pChangeAction->GetDateTime(); | |||
113 | OUString aDate = ScGlobal::getLocaleDataPtr()->getDate( aDT ) + " " + | |||
114 | ScGlobal::getLocaleDataPtr()->getTime( aDT, false ); | |||
115 | ||||
116 | pDlg->ShowLastAuthor(aAuthor, aDate); | |||
117 | pDlg->SetNote(aComment); | |||
118 | } | |||
119 | ||||
120 | void ScRedComDialog::Execute() | |||
121 | { | |||
122 | short nRet=pDlg->Execute(); | |||
123 | ||||
124 | if(nRet== RET_OK ) | |||
125 | { | |||
126 | if ( pDocShell!=nullptr && pDlg->GetNote() != aComment ) | |||
127 | pDocShell->SetChangeComment( pChangeAction, pDlg->GetNote()); | |||
128 | } | |||
129 | } | |||
130 | ||||
131 | void ScRedComDialog::SelectCell() | |||
132 | { | |||
133 | if(pChangeAction==nullptr) | |||
134 | return; | |||
135 | ||||
136 | const ScChangeAction* pAction=pChangeAction; | |||
137 | const ScBigRange& rRange = pAction->GetBigRange(); | |||
138 | ||||
139 | if(rRange.IsValid(pDocShell->GetDocument())) | |||
| ||||
140 | { | |||
141 | ScViewData* pViewData=ScDocShell::GetViewData(); | |||
142 | ScRange aRef=rRange.MakeRange(); | |||
143 | ScTabView* pTabView=pViewData->GetView(); | |||
144 | pTabView->MarkRange(aRef); | |||
145 | } | |||
146 | } | |||
147 | ||||
148 | IMPL_LINK(ScRedComDialog, PrevHdl, AbstractSvxPostItDialog&, rDlgP, void )void ScRedComDialog::LinkStubPrevHdl(void * instance, AbstractSvxPostItDialog & data) { return static_cast<ScRedComDialog *>(instance )->PrevHdl(data); } void ScRedComDialog::PrevHdl(AbstractSvxPostItDialog & rDlgP) | |||
149 | { | |||
150 | if (pDocShell!=nullptr && rDlgP.GetNote() != aComment ) | |||
151 | pDocShell->SetChangeComment( pChangeAction, rDlgP.GetNote()); | |||
152 | ||||
153 | ReInit(FindPrev(pChangeAction)); | |||
154 | SelectCell(); | |||
155 | } | |||
156 | ||||
157 | IMPL_LINK(ScRedComDialog, NextHdl, AbstractSvxPostItDialog&, rDlgP, void )void ScRedComDialog::LinkStubNextHdl(void * instance, AbstractSvxPostItDialog & data) { return static_cast<ScRedComDialog *>(instance )->NextHdl(data); } void ScRedComDialog::NextHdl(AbstractSvxPostItDialog & rDlgP) | |||
| ||||
158 | { | |||
159 | if ( pDocShell!=nullptr && rDlgP.GetNote() != aComment ) | |||
160 | pDocShell->SetChangeComment( pChangeAction, rDlgP.GetNote()); | |||
161 | ||||
162 | ReInit(FindNext(pChangeAction)); | |||
163 | SelectCell(); | |||
164 | } | |||
165 | ||||
166 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |