LibreOffice Module sw (master) 1
pardlg.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 <sfx2/htmlmode.hxx>
21#include <sfx2/tabdlg.hxx>
22#include <svl/style.hxx>
23#include <svtools/htmlcfg.hxx>
24#include <svl/cjkoptions.hxx>
25#include <docsh.hxx>
26#include <wrtsh.hxx>
27#include <view.hxx>
28#include <swuipardlg.hxx>
29#include <pardlg.hxx>
30#include <drpcps.hxx>
31#include <viewopt.hxx>
32#include <numpara.hxx>
33#include <strings.hrc>
34#include <svx/svxids.hrc>
35#include <svl/eitem.hxx>
36#include <svl/intitem.hxx>
37#include <svx/svxdlg.hxx>
38#include <svx/dialogs.hrc>
39#include <svx/flagsdef.hxx>
40#include <osl/diagnose.h>
41
43 SwView& rVw,
44 const SfxItemSet& rCoreSet,
45 sal_uInt8 nDialogMode,
46 const OUString *pTitle,
47 bool bDraw,
48 const OString& sDefPage)
49 : SfxTabDialogController(pParent,
50 "modules/swriter/ui/paradialog.ui",
51 "ParagraphPropertiesDialog",
52 &rCoreSet, nullptr != pTitle)
53 , m_rView(rVw)
54 , m_bDrawParaDlg(bDraw)
55{
56 sal_uInt16 nHtmlMode = ::GetHtmlMode(rVw.GetDocShell());
57 bool bHtmlMode = (nHtmlMode & HTMLMODE_ON) == HTMLMODE_ON;
58 if(pTitle)
59 {
60 // Update title
61 m_xDialog->set_title(m_xDialog->get_title() + SwResId(STR_TEXTCOLL_HEADER) + *pTitle + ")");
62 }
63 // tabs common to paragraph and draw paragraphs (paragraphs inside a text box)
65
66 OSL_ENSURE(pFact->GetTabPageCreatorFunc(RID_SVXPAGE_STD_PARAGRAPH), "GetTabPageCreatorFunc fail!");
67 OSL_ENSURE(pFact->GetTabPageRangesFunc(RID_SVXPAGE_STD_PARAGRAPH), "GetTabPageRangesFunc fail!");
68 AddTabPage("labelTP_PARA_STD", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_STD_PARAGRAPH),
69 pFact->GetTabPageRangesFunc(RID_SVXPAGE_STD_PARAGRAPH) );
70
71 OSL_ENSURE(pFact->GetTabPageCreatorFunc(RID_SVXPAGE_ALIGN_PARAGRAPH), "GetTabPageCreatorFunc fail!");
72 OSL_ENSURE(pFact->GetTabPageRangesFunc(RID_SVXPAGE_ALIGN_PARAGRAPH), "GetTabPageRangesFunc fail!");
73 AddTabPage("labelTP_PARA_ALIGN", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_ALIGN_PARAGRAPH),
74 pFact->GetTabPageRangesFunc(RID_SVXPAGE_ALIGN_PARAGRAPH));
75
77 {
78 OSL_ENSURE(pFact->GetTabPageCreatorFunc(RID_SVXPAGE_EXT_PARAGRAPH), "GetTabPageCreatorFunc fail!");
79 OSL_ENSURE(pFact->GetTabPageRangesFunc(RID_SVXPAGE_EXT_PARAGRAPH), "GetTabPageRangesFunc fail!");
80 AddTabPage("textflow", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_EXT_PARAGRAPH),
81 pFact->GetTabPageRangesFunc(RID_SVXPAGE_EXT_PARAGRAPH));
82
83 }
84 else
85 RemoveTabPage("textflow");
86
88 {
89 OSL_ENSURE(pFact->GetTabPageCreatorFunc(RID_SVXPAGE_PARA_ASIAN), "GetTabPageCreatorFunc fail!");
90 OSL_ENSURE(pFact->GetTabPageRangesFunc(RID_SVXPAGE_PARA_ASIAN), "GetTabPageRangesFunc fail!");
91 AddTabPage( "labelTP_PARA_ASIAN", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_PARA_ASIAN),
92 pFact->GetTabPageRangesFunc(RID_SVXPAGE_PARA_ASIAN) );
93 }
94 else
95 RemoveTabPage("labelTP_PARA_ASIAN");
96
97 if(bHtmlMode)
98 RemoveTabPage("labelTP_TABULATOR");
99 else
100 {
101 OSL_ENSURE(pFact->GetTabPageCreatorFunc(RID_SVXPAGE_TABULATOR), "GetTabPageCreatorFunc fail!");
102 OSL_ENSURE(pFact->GetTabPageRangesFunc(RID_SVXPAGE_TABULATOR), "GetTabPageRangesFunc fail!");
103 AddTabPage( "labelTP_TABULATOR", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_TABULATOR), pFact->GetTabPageRangesFunc(RID_SVXPAGE_TABULATOR) );
104 }
105
106 // remove unwanted tabs for draw text box paragraph properties
107 if (m_bDrawParaDlg)
108 {
109 RemoveTabPage("labelTP_NUMPARA");
110 RemoveTabPage("labelTP_DROPCAPS");
111 RemoveTabPage("labelTP_BORDER");
112 RemoveTabPage("area");
113 RemoveTabPage("transparence");
114 }
115 else
116 {
117 if(!(nDialogMode & DLG_ENVELOP))
119 else
120 RemoveTabPage("labelTP_NUMPARA");
121
123
124 if(!bHtmlMode || (nHtmlMode & (HTMLMODE_SOME_STYLES|HTMLMODE_FULL_STYLES)))
125 {
126 // add Area and Transparence TabPages
127 AddTabPage("area", pFact->GetTabPageCreatorFunc( RID_SVXPAGE_AREA ), pFact->GetTabPageRangesFunc( RID_SVXPAGE_AREA ));
128 AddTabPage("transparence", pFact->GetTabPageCreatorFunc( RID_SVXPAGE_TRANSPARENCE ), pFact->GetTabPageRangesFunc( RID_SVXPAGE_TRANSPARENCE ) );
129 }
130 else
131 {
132 RemoveTabPage("area");
133 RemoveTabPage("transparence");
134 }
135
136 OSL_ENSURE(pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ), "GetTabPageCreatorFunc fail!");
137 OSL_ENSURE(pFact->GetTabPageRangesFunc( RID_SVXPAGE_BORDER ), "GetTabPageRangesFunc fail!");
138 AddTabPage("labelTP_BORDER", pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ), pFact->GetTabPageRangesFunc( RID_SVXPAGE_BORDER ) );
139 }
140
141 if (!sDefPage.isEmpty())
142 SetCurPageId(sDefPage);
143}
144
146{
147}
148
149void SwParaDlg::PageCreated(const OString& rId, SfxTabPage& rPage)
150{
152 SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
153
154 // Table borders cannot get any shade in Writer
155 if (rId == "labelTP_BORDER")
156 {
157 aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,static_cast<sal_uInt16>(SwBorderModes::PARA)));
158 rPage.PageCreated(aSet);
159 }
160 else if (rId == "labelTP_PARA_STD")
161 {
162 aSet.Put(SfxUInt16Item(SID_SVXSTDPARAGRAPHTABPAGE_PAGEWIDTH,
163 static_cast< sal_uInt16 >(rSh.GetAnyCurRect(CurRectType::PagePrt).Width()) ));
164
165 if (!m_bDrawParaDlg)
166 {
167 // See SvxStdParagraphTabPage::PageCreated: enable RegisterMode, AutoFirstLine, NegativeMode, ContextualMode
168 constexpr tools::Long constTwips_0_5mm = o3tl::toTwips(5, o3tl::Length::mm10);
169 aSet.Put(SfxUInt32Item(SID_SVXSTDPARAGRAPHTABPAGE_FLAGSET,0x0002|0x0004|0x0008|0x0010));
170 aSet.Put(SfxUInt32Item(SID_SVXSTDPARAGRAPHTABPAGE_ABSLINEDIST, constTwips_0_5mm));
171
172 }
173 rPage.PageCreated(aSet);
174 }
175 else if (rId == "labelTP_PARA_ALIGN")
176 {
177 if (!m_bDrawParaDlg)
178 {
179 aSet.Put(SfxBoolItem(SID_SVXPARAALIGNTABPAGE_ENABLEJUSTIFYEXT,true));
180 rPage.PageCreated(aSet);
181 }
182 }
183 else if (rId == "textflow")
184 {
185 // pagebreak only when the cursor is in the body-area and not in a table
186 const FrameTypeFlags eType = rSh.GetFrameType(nullptr,true);
187 if( !(FrameTypeFlags::BODY & eType) ||
189 {
190 aSet.Put(SfxBoolItem(SID_DISABLE_SVXEXTPARAGRAPHTABPAGE_PAGEBREAK,true));
191 rPage.PageCreated(aSet);
192 }
193 }
194 else if (rId == "labelTP_DROPCAPS")
195 {
196 static_cast<SwDropCapsPage&>(rPage).SetFormat(false);
197 }
198 else if (rId == "labelTP_NUMPARA")
199 {
200 SwTextFormatColl* pTmpColl = rSh.GetCurTextFormatColl();
201 if( pTmpColl && pTmpColl->IsAssignedToListLevelOfOutlineStyle() )
202 {
203 static_cast<SwParagraphNumTabPage&>(rPage).DisableOutline() ;
204 }
205
206 static_cast<SwParagraphNumTabPage&>(rPage).EnableNewStart();
207 weld::ComboBox& rBox = static_cast<SwParagraphNumTabPage&>(rPage).GetStyleBox();
209 const SfxStyleSheetBase* pBase = pPool->First(SfxStyleFamily::Pseudo);
210 std::set<OUString> aNames;
211 while(pBase)
212 {
213 aNames.insert(pBase->GetName());
214 pBase = pPool->Next();
215 }
216 aNames.erase(SwResId(STR_POOLNUMRULE_NOLIST));
217 for (const auto& rName : aNames)
218 rBox.append_text(rName);
219 }
220 // inits for Area and Transparency TabPages
221 // The selection attribute lists (XPropertyList derivates, e.g. XColorList for
222 // the color table) need to be added as items (e.g. SvxColorTableItem) to make
223 // these pages find the needed attributes for fill style suggestions.
224 // These are added in SwDocStyleSheet::GetItemSet() for the SfxStyleFamily::Para on
225 // demand, but could also be directly added from the DrawModel.
226 else if (rId == "area")
227 {
229 <SID_COLOR_TABLE, SID_PATTERN_LIST,
230 SID_OFFER_IMPORT, SID_OFFER_IMPORT> aNew(*aSet.GetPool());
231
232 aNew.Put(*GetInputSetImpl());
233
234 // add flag for direct graphic content selection
235 aNew.Put(SfxBoolItem(SID_OFFER_IMPORT, true));
236
237 rPage.PageCreated(aNew);
238 }
239 else if (rId == "transparence")
240 {
242 }
243}
244
245/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Reference< XExecutableDialog > m_xDialog
SfxItemPool * GetPool() const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
SfxStyleSheetBase * First(SfxStyleFamily eFamily, SfxStyleSearchBits eMask=SfxStyleSearchBits::All)
SfxStyleSheetBase * Next()
const OUString & GetName() const
void SetCurPageId(const OString &rName)
void AddTabPage(const OString &rName, CreateTabPage pCreateFunc, GetTabPageRanges pRangesFunc)
void RemoveTabPage(const OString &rName)
SfxItemSet * GetInputSetImpl()
virtual void PageCreated(const SfxAllItemSet &aSet)
static SvxAbstractDialogFactory * Create()
virtual SfxStyleSheetBasePool * GetStyleSheetPool() override
For Style PI.
Definition: docsh.cxx:1154
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rSet)
Definition: drpcps.cxx:522
static WhichRangesContainer GetRanges()
Definition: drpcps.hxx:156
SwTextFormatColl * GetCurTextFormatColl() const
Get the named paragraph format of the current selection.
Definition: edattr.cxx:238
FrameTypeFlags GetFrameType(const Point *pPt, bool bStopAtFly) const
For return values see above FrameType.
Definition: fews.cxx:237
const SwRect & GetAnyCurRect(CurRectType eType, const Point *pPt=nullptr, const css::uno::Reference< css::embed::XEmbeddedObject > &=css::uno::Reference< css::embed::XEmbeddedObject >()) const
Definition: fews.cxx:90
bool m_bDrawParaDlg
Definition: swuipardlg.hxx:29
SwParaDlg(weld::Window *pParent, SwView &rVw, const SfxItemSet &, sal_uInt8 nDialogMode, const OUString *pCollName, bool bDraw=false, const OString &sDefPage=OString())
Definition: pardlg.cxx:42
void PageCreated(const OString &rId, SfxTabPage &rPage) override
Definition: pardlg.cxx:149
virtual ~SwParaDlg() override
Definition: pardlg.cxx:145
SwView & m_rView
Definition: swuipardlg.hxx:28
static WhichRangesContainer GetRanges()
Definition: numpara.hxx:70
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rSet)
Definition: numpara.cxx:91
void Width(tools::Long nNew)
Definition: swrect.hxx:189
Represents the style of a paragraph.
Definition: fmtcol.hxx:59
bool IsAssignedToListLevelOfOutlineStyle() const
Definition: fmtcol.hxx:120
Definition: view.hxx:146
SwWrtShell & GetWrtShell() const
Definition: view.hxx:416
SwDocShell * GetDocShell()
Definition: view.cxx:1160
Used by the UI to modify the document model.
Definition: wrtsh.hxx:97
SelectionType GetSelectionType() const
Definition: wrtsh1.cxx:1706
void append_text(const OUString &rStr)
@ PagePrt
Rect of current PrtArea of page.
FrameTypeFlags
values can be combined via logical or
Definition: fesh.hxx:63
DocumentType eType
HTMLMODE_SOME_STYLES
HTMLMODE_ON
HTMLMODE_FULL_STYLES
bool IsAsianTypographyEnabled()
bool IsPrintLayoutExtension()
constexpr auto toTwips(N number, Length from)
long Long
#define DLG_ENVELOP
Definition: pardlg.hxx:24
OUString SwResId(TranslateId aId)
Definition: swmodule.cxx:165
void SetFormat(LotusContext &rContext, SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt8 nFormat, sal_uInt8 nSt)
unsigned char sal_uInt8
sal_uInt16 GetHtmlMode(const SwDocShell *pShell)
Definition: viewopt.cxx:332