LibreOffice Module sw (master) 1
view1.cxx
Go to the documentation of this file.
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 <svl/eitem.hxx>
21#include <svx/ruler.hxx>
22#include <idxmrk.hxx>
23#include <view.hxx>
24#include <basesh.hxx>
25#include <wrtsh.hxx>
26#include <swmodule.hxx>
27#include <docsh.hxx>
28#include <fldwrap.hxx>
29#include <redlndlg.hxx>
30#include <edtwin.hxx>
31#include <formatclipboard.hxx>
32#include <cmdid.h>
33#include <sfx2/dispatch.hxx>
34#include <sfx2/request.hxx>
35#include <sfx2/viewfrm.hxx>
36#include <wordcountdialog.hxx>
37
38void SwView::Activate(bool bMDIActivate)
39{
40 // fdo#40438 Update the layout to make sure everything is correct before showing the content
41 m_pWrtShell->StartAction();
42 m_pWrtShell->EndAction( true );
43
44 // Register the current View at the DocShell.
45 // The view remains active at the DocShell until it will
46 // be destroyed or by Activate a new one will be set.
47 SwDocShell* pDocSh = GetDocShell();
48 if(pDocSh)
49 pDocSh->SetView(this);
50 SwModule* pSwMod = SW_MOD();
51 pSwMod->SetView(this);
52
53 // Document size has changed.
54 if(!bDocSzUpdated)
56
57 // make selection visible
59 {
60 m_pWrtShell->MakeSelVisible();
62 }
63 m_pHRuler->SetActive();
64 m_pVRuler->SetActive();
65
66 if ( bMDIActivate )
67 {
68 if ( m_pShell )
69 {
70 SfxDispatcher &rDispatcher = GetDispatcher();
71 SfxShell *pTopShell = rDispatcher.GetShell( 0 );
72
73 // this SwView is the top-most shell on the stack
74 if ( pTopShell == this )
75 {
76 for ( sal_uInt16 i = 1; true; ++i )
77 {
78 SfxShell *pSfxShell = rDispatcher.GetShell( i );
79 // does the stack contain any shells spawned by this SwView already?
80 if ( ( dynamic_cast< const SwBaseShell *>( pSfxShell ) != nullptr
81 || dynamic_cast< const FmFormShell *>( pSfxShell ) != nullptr )
82 && ( pSfxShell->GetViewShell() == this ) )
83 {
84 // it shouldn't b/c we haven't been activated yet
85 // so assert that 'cause it'll crash during dispose at the latest
86 assert( pSfxShell && "Corrupted shell stack: dependent shell positioned below its view");
87 }
88 else
89 break;
90 }
91 }
92 }
93
94 m_pWrtShell->ShellGetFocus(); // Selections visible
95
96 if( !m_sSwViewData.isEmpty() )
97 {
99 m_sSwViewData.clear();
100 }
101
102 AttrChangedNotify(nullptr);
103
104 // Initialize Fielddlg newly if necessary (e.g. for TYP_SETVAR)
105 sal_uInt16 nId = SwFieldDlgWrapper::GetChildWindowId();
106 SfxViewFrame* pVFrame = GetViewFrame();
107 SwFieldDlgWrapper *pWrp = static_cast<SwFieldDlgWrapper*>(pVFrame->GetChildWindow(nId));
108 if (pWrp)
109 pWrp->ReInitDlg(GetDocShell());
110
111 // Initialize RedlineDlg newly if necessary
112 nId = SwRedlineAcceptChild::GetChildWindowId();
113 SwRedlineAcceptChild *pRed = static_cast<SwRedlineAcceptChild*>(pVFrame->GetChildWindow(nId));
114 if (pRed)
115 pRed->ReInitDlg(GetDocShell());
116
117 // reinit IdxMarkDlg
118 nId = SwInsertIdxMarkWrapper::GetChildWindowId();
119 SwInsertIdxMarkWrapper *pIdxMrk = static_cast<SwInsertIdxMarkWrapper*>(pVFrame->GetChildWindow(nId));
120 if (pIdxMrk)
121 pIdxMrk->ReInitDlg(*m_pWrtShell);
122
123 // reinit AuthMarkDlg
124 nId = SwInsertAuthMarkWrapper::GetChildWindowId();
125 SwInsertAuthMarkWrapper *pAuthMrk = static_cast<SwInsertAuthMarkWrapper*>(pVFrame->
126 GetChildWindow(nId));
127 if (pAuthMrk)
128 pAuthMrk->ReInitDlg(*m_pWrtShell);
129 }
130 else
131 // At least call the Notify (as a precaution because of the SlotFilter).
132 AttrChangedNotify(nullptr);
133
134 SfxViewShell::Activate(bMDIActivate);
135}
136
137void SwView::Deactivate(bool bMDIActivate)
138{
139 GetEditWin().FlushInBuffer(); // Flush characters still in the input buffer.
140
141 if( bMDIActivate )
142 {
143 m_pWrtShell->ShellLoseFocus(); // Selections invisible
144
145 m_pHRuler->SetActive( false );
146 m_pVRuler->SetActive( false );
147 }
148 SfxViewShell::Deactivate(bMDIActivate);
149}
150
152{
154}
155
157{
159 return;
160
161 if( m_pFormatClipboard->HasContent() )
162 {
163 m_pFormatClipboard->Erase();
164
165 SwApplyTemplate aTemplate;
166 GetEditWin().SetApplyTemplate(aTemplate);
167 }
168 else
169 {
170 bool bPersistentCopy = false;
171 const SfxItemSet *pArgs = rReq.GetArgs();
172 if( pArgs && pArgs->Count() >= 1 )
173 {
174 bPersistentCopy = pArgs->Get(SID_FORMATPAINTBRUSH).GetValue();
175 }
176
177 m_pFormatClipboard->Copy( GetWrtShell(), GetPool(), bPersistentCopy );
178
179 SwApplyTemplate aTemplate;
180 aTemplate.m_pFormatClipboard = m_pFormatClipboard.get();
181 GetEditWin().SetApplyTemplate(aTemplate);
182 }
183 GetViewFrame()->GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
184}
185
187{
189 return;
190
191 const bool bHasContent = m_pFormatClipboard->HasContent();
192 if( !bHasContent &&
194 )
195 {
196 rSet.DisableItem( SID_FORMATPAINTBRUSH );
197 }
198 else
199 rSet.Put(SfxBoolItem(SID_FORMATPAINTBRUSH, bHasContent));
200}
201
202void SwView::UpdateWordCount(SfxShell* pShell, sal_uInt16 nSlot)
203{
204 SfxViewFrame* pVFrame = GetViewFrame();
205 if (pVFrame != nullptr)
206 {
208 pShell->Invalidate(nSlot);
209
210 SwWordCountWrapper *pWrdCnt = static_cast<SwWordCountWrapper*>(pVFrame->GetChildWindow(SwWordCountWrapper::GetChildWindowId()));
211 if (pWrdCnt)
212 pWrdCnt->UpdateCounts();
213 }
214}
215
216/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void Invalidate(sal_uInt16 nId)
SfxShell * GetShell(sal_uInt16 nIdx) const
sal_uInt16 Count() const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
void DisableItem(sal_uInt16 nWhich)
const SfxItemSet * GetArgs() const
SfxItemPool & GetPool() const
virtual void Invalidate(sal_uInt16 nId=0)
SfxViewShell * GetViewShell() const
void ToggleChildWindow(sal_uInt16)
SfxBindings & GetBindings()
SfxChildWindow * GetChildWindow(sal_uInt16)
virtual void Activate(bool IsMDIActivate) override
virtual void Deactivate(bool IsMDIActivate) override
SfxViewFrame * GetViewFrame() const
const Size & GetMargin() const
void SetView(SwView *pVw)
Set View for actions via Shell.
Definition: docsh.cxx:1164
void SetApplyTemplate(const SwApplyTemplate &)
Apply template.
Definition: edtwin.cxx:5266
void FlushInBuffer()
Character buffer is inserted into the document.
Definition: edtwin.cxx:882
virtual bool ReInitDlg(SwDocShell *pDocSh) override
Definition: fldwrap.cxx:79
static bool CanCopyThisType(SelectionType nSelectionType)
void ReInitDlg(SwWrtShell &rWrtShell)
Definition: idxmrk.cxx:68
void ReInitDlg(SwWrtShell &rWrtShell)
Definition: idxmrk.cxx:44
void SetView(SwView *pVw)
Definition: swmodule.hxx:145
virtual bool ReInitDlg(SwDocShell *pDocSh) override
Definition: redlndlg.cxx:72
void SetBrowseBorder(const Size &rNew)
Definition: viewsh.cxx:2074
virtual void Deactivate(bool) override
Definition: view1.cxx:137
SfxDispatcher & GetDispatcher()
Definition: view.cxx:135
SwWrtShell & GetWrtShell() const
Definition: view.hxx:416
SfxShell * m_pShell
Definition: view.hxx:197
std::unique_ptr< SwWrtShell > m_pWrtShell
Definition: view.hxx:194
SelectionType GetSelectionType() const
Definition: view.hxx:355
VclPtr< SvxRuler > m_pHRuler
Definition: view.hxx:208
VclPtr< SvxRuler > m_pVRuler
Definition: view.hxx:209
std::unique_ptr< SwFormatClipboard > m_pFormatClipboard
Definition: view.hxx:217
virtual void ReadUserData(const OUString &, bool bBrowse=false) override
Definition: view.cxx:1212
Size m_aDocSz
Definition: view.hxx:190
virtual void MarginChanged() override
Definition: view1.cxx:151
bool m_bMakeSelectionVisible
Definition: view.hxx:259
SwEditWin & GetEditWin()
Definition: view.hxx:419
void ExecFormatPaintbrush(SfxRequest const &)
Definition: view1.cxx:156
SwDocShell * GetDocShell()
Definition: view.cxx:1160
void UpdateWordCount(SfxShell *, sal_uInt16)
Definition: view1.cxx:202
void DocSzChgd(const Size &rNewSize)
Definition: viewport.cxx:154
OUString m_sSwViewData
Definition: view.hxx:178
virtual void Activate(bool) override
Definition: view1.cxx:38
void StateFormatPaintbrush(SfxItemSet &)
Definition: view1.cxx:186
#define FN_WORDCOUNT_DIALOG
Definition: cmdid.h:608
int i
sal_Int16 nId
static SfxItemSet & rSet
SwFormatClipboard * m_pFormatClipboard
Definition: view.hxx:119
#define SW_MOD()
Definition: swmodule.hxx:256
bool bDocSzUpdated
Definition: view.cxx:124