LibreOffice Module sfx2 (master) 1
infobar.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
16#include <memory>
17#include <officecfg/Office/UI/Infobar.hxx>
18#include <sfx2/bindings.hxx>
19#include <sfx2/dispatch.hxx>
20#include <sfx2/infobar.hxx>
21#include <sfx2/objface.hxx>
22#include <sfx2/sfxsids.hrc>
23#include <sfx2/viewfrm.hxx>
24#include <utility>
25#include <vcl/image.hxx>
26#include <vcl/settings.hxx>
27#include <vcl/svapp.hxx>
28#include <vcl/virdev.hxx>
29#include <vcl/weldutils.hxx>
30#include <bitmaps.hlst>
31
32using namespace drawinglayer::geometry;
33using namespace drawinglayer::processor2d;
34using namespace drawinglayer::primitive2d;
35using namespace drawinglayer::attribute;
36using namespace basegfx;
37using namespace css::frame;
38
39namespace
40{
41void GetInfoBarColors(InfobarType ibType, BColor& rBackgroundColor, BColor& rForegroundColor,
42 BColor& rMessageColor)
43{
44 rMessageColor = basegfx::BColor(0.0, 0.0, 0.0);
45
46 switch (ibType)
47 {
48 case InfobarType::INFO: // blue; #004785/0,71,133; #BDE5F8/189,229,248
49 rBackgroundColor = basegfx::BColor(0.741, 0.898, 0.973);
50 rForegroundColor = basegfx::BColor(0.0, 0.278, 0.522);
51 break;
52 case InfobarType::SUCCESS: // green; #32550C/50,85,12; #DFF2BF/223,242,191
53 rBackgroundColor = basegfx::BColor(0.874, 0.949, 0.749);
54 rForegroundColor = basegfx::BColor(0.196, 0.333, 0.047);
55 break;
56 case InfobarType::WARNING: // orange; #704300/112,67,0; #FEEFB3/254,239,179
57 rBackgroundColor = basegfx::BColor(0.996, 0.937, 0.702);
58 rForegroundColor = basegfx::BColor(0.439, 0.263, 0.0);
59 break;
60 case InfobarType::DANGER: // red; #7A0006/122,0,6; #FFBABA/255,186,186
61 rBackgroundColor = basegfx::BColor(1.0, 0.729, 0.729);
62 rForegroundColor = basegfx::BColor(0.478, 0.0, 0.024);
63 break;
64 }
65
66 //remove this?
68 if (rSettings.GetHighContrastMode())
69 {
70 rBackgroundColor = rSettings.GetLightColor().getBColor();
71 rForegroundColor = rSettings.GetDialogTextColor().getBColor();
72 }
73}
74OUString GetInfoBarIconName(InfobarType ibType)
75{
76 OUString aRet;
77
78 switch (ibType)
79 {
81 aRet = "vcl/res/infobox.png";
82 break;
84 aRet = "vcl/res/successbox.png";
85 break;
87 aRet = "vcl/res/warningbox.png";
88 break;
90 aRet = "vcl/res/errorbox.png";
91 break;
92 }
93
94 return aRet;
95}
96
97} // anonymous namespace
98
100{
101 Size aSize = Image(StockImage::Yes, CLOSEDOC).GetSizePixel();
102 aSize = Size(aSize.Width() * 1.5, aSize.Height() * 1.5);
103
104 ScopedVclPtr<VirtualDevice> xDevice(m_xCloseBtn->create_virtual_device());
105 xDevice->SetOutputSizePixel(aSize);
106
107 Point aBtnPos(0, 0);
108
109 const ViewInformation2D aNewViewInfos;
110 const std::unique_ptr<BaseProcessor2D> pProcessor(
111 createProcessor2DFromOutputDevice(*xDevice, aNewViewInfos));
112
113 const ::tools::Rectangle aRect(aBtnPos, xDevice->PixelToLogic(aSize));
114
116
117 // Draw backround. The right and bottom need to be extended by 1 or
118 // there will be a white line on both edges.
119 B2DPolygon aPolygon;
120 aPolygon.append(B2DPoint(aRect.Left(), aRect.Top()));
121 aPolygon.append(B2DPoint(aRect.Right() + 1, aRect.Top()));
122 aPolygon.append(B2DPoint(aRect.Right() + 1, aRect.Bottom() + 1));
123 aPolygon.append(B2DPoint(aRect.Left(), aRect.Bottom() + 1));
124 aPolygon.setClosed(true);
125
127
128 LineAttribute aLineAttribute(m_aForegroundColor, 2.0);
129
130 // Cross
131 B2DPolyPolygon aCross;
132
133 B2DPolygon aLine1;
134 aLine1.append(B2DPoint(aRect.Left(), aRect.Top()));
135 aLine1.append(B2DPoint(aRect.Right(), aRect.Bottom()));
136 aCross.append(aLine1);
137
138 B2DPolygon aLine2;
139 aLine2.append(B2DPoint(aRect.Right(), aRect.Top()));
140 aLine2.append(B2DPoint(aRect.Left(), aRect.Bottom()));
141 aCross.append(aLine2);
142
143 aSeq[1]
144 = new PolyPolygonStrokePrimitive2D(std::move(aCross), aLineAttribute, StrokeAttribute());
145
146 pProcessor->process(aSeq);
147
148 m_xCloseBtn->set_item_image("close", xDevice);
149}
150
152{
153private:
154 std::unique_ptr<weld::Builder> m_xBuilder;
155 std::unique_ptr<weld::Container> m_xContainer;
156 std::unique_ptr<weld::Button> m_xButton;
159 OUString m_aCommand;
160
161 DECL_LINK(CommandHdl, weld::Button&, void);
162
163public:
164 ExtraButton(weld::Container* pContainer, const OUString* pCommand)
165 : m_xBuilder(Application::CreateBuilder(pContainer, "sfx/ui/extrabutton.ui"))
166 , m_xContainer(m_xBuilder->weld_container("ExtraButton"))
167 , m_xButton(m_xBuilder->weld_button("button"))
168 {
169 if (pCommand)
170 {
171 m_aCommand = *pCommand;
172 m_xButton->connect_clicked(LINK(this, ExtraButton, CommandHdl));
174 m_xStatusListener->startListening();
175 }
176 }
177
179 {
180 if (m_xStatusListener.is())
181 m_xStatusListener->dispose();
182 }
183
185};
186
188{
189 comphelper::dispatchCommand(m_aCommand, css::uno::Sequence<css::beans::PropertyValue>());
190}
191
193 const OUString& sPrimaryMessage,
194 const OUString& sSecondaryMessage, InfobarType ibType,
195 bool bShowCloseButton)
196 : InterimItemWindow(pParent, "sfx/ui/infobar.ui", "InfoBar")
197 , m_sId(std::move(sId))
198 , m_eType(ibType)
199 , m_bLayingOut(false)
200 , m_xImage(m_xBuilder->weld_image("image"))
201 , m_xPrimaryMessage(m_xBuilder->weld_label("primary"))
202 , m_xSecondaryMessage(m_xBuilder->weld_text_view("secondary"))
203 , m_xButtonBox(m_xBuilder->weld_container("buttonbox"))
204 , m_xCloseBtn(m_xBuilder->weld_toolbar("closebar"))
205{
207
209
210 m_xImage->set_from_icon_name(GetInfoBarIconName(ibType));
211 m_xSecondaryMessage->set_margin_top(m_xImage->get_preferred_size().Height() / 4);
212
213 if (!sPrimaryMessage.isEmpty())
214 {
215 m_xPrimaryMessage->set_label(sPrimaryMessage);
216 m_xPrimaryMessage->show();
217 }
218
219 m_xSecondaryMessage->set_text(sSecondaryMessage);
220 m_aOrigMessageSize = m_xSecondaryMessage->get_preferred_size();
222 m_xSecondaryMessage->connect_size_allocate(LINK(this, SfxInfoBarWindow, SizeAllocHdl));
223
224 if (bShowCloseButton)
225 {
226 m_xCloseBtn->connect_clicked(LINK(this, SfxInfoBarWindow, CloseHandler));
227 m_xCloseBtn->show();
228 }
229
231
233
234 auto nWidth = pParent->GetSizePixel().getWidth();
235 auto nHeight = get_preferred_size().Height();
236 SetSizePixel(Size(nWidth, nHeight + 2));
237
238 Resize();
239}
240
241IMPL_LINK(SfxInfoBarWindow, SizeAllocHdl, const Size&, rSize, void)
242{
243 if (m_aMessageSize != rSize)
244 {
245 m_aMessageSize = rSize;
246 static_cast<SfxInfoBarContainerWindow*>(GetParent())->TriggerUpdateLayout();
247 }
248}
249
251{
252 Size aGivenSize(GetSizePixel());
253
254 // disconnect SizeAllocHdl because we don't care about the size change
255 // during layout
256 m_xSecondaryMessage->connect_size_allocate(Link<const Size&, void>());
257
258 // blow away size cache in case m_aMessageSize.Width() is already the width request
259 // and we would get the cached preferred size instead of the recalc we want to force
260 m_xSecondaryMessage->set_size_request(-1, -1);
261 // make the width we were detected as set to by SizeAllocHdl as our desired width
262 m_xSecondaryMessage->set_size_request(m_aMessageSize.Width(), -1);
263 // get our preferred size with that message width
264 Size aSizeForWidth(aGivenSize.Width(), m_xContainer->get_preferred_size().Height());
265 // restore the message preferred size so we can freely resize, and get a new
266 // m_aMessageSize and repeat the process if we do
267 m_xSecondaryMessage->set_size_request(m_aOrigMessageSize.Width(), -1);
268
269 // connect SizeAllocHdl so changes outside of this layout will trigger a new layout
270 m_xSecondaryMessage->connect_size_allocate(LINK(this, SfxInfoBarWindow, SizeAllocHdl));
271
272 return aSizeForWidth;
273}
274
276{
277 if (m_bLayingOut)
278 return;
279 m_bLayingOut = true;
280
282
283 m_bLayingOut = false;
284}
285
287{
288 m_aActionBtns.emplace_back(std::make_unique<ExtraButton>(m_xButtonBox.get(), pCommand));
289
290 return m_aActionBtns.back()->get_widget();
291}
292
294
296{
297 basegfx::BColor aMessageColor;
298 GetInfoBarColors(eType, m_aBackgroundColor, m_aForegroundColor, aMessageColor);
299
300 m_xPrimaryMessage->set_font_color(Color(aMessageColor));
301 m_xSecondaryMessage->set_font_color(Color(aMessageColor));
302
303 Color aBackgroundColor(m_aBackgroundColor);
304 m_xPrimaryMessage->set_background(aBackgroundColor);
305 m_xSecondaryMessage->set_background(aBackgroundColor);
306 m_xContainer->set_background(aBackgroundColor);
307 if (m_xCloseBtn->get_visible())
308 {
309 m_xCloseBtn->set_background(aBackgroundColor);
311 }
312}
313
315{
316 for (auto& rxBtn : m_aActionBtns)
317 rxBtn.reset();
318
319 m_xImage.reset();
320 m_xPrimaryMessage.reset();
321 m_xSecondaryMessage.reset();
322 m_xButtonBox.reset();
323 m_xCloseBtn.reset();
324 m_aActionBtns.clear();
326}
327
328void SfxInfoBarWindow::Update(const OUString& sPrimaryMessage, const OUString& sSecondaryMessage,
329 InfobarType eType)
330{
331 if (m_eType != eType)
332 {
333 m_eType = eType;
335 m_xImage->set_from_icon_name(GetInfoBarIconName(eType));
336 }
337
338 m_xPrimaryMessage->set_label(sPrimaryMessage);
339 m_xSecondaryMessage->set_text(sSecondaryMessage);
340 Resize();
341 Invalidate();
342}
343
344IMPL_LINK_NOARG(SfxInfoBarWindow, CloseHandler, const OUString&, void)
345{
346 static_cast<SfxInfoBarContainerWindow*>(GetParent())->removeInfoBar(this);
347}
348
350 : Window(pChildWin->GetParent(), WB_DIALOGCONTROL)
351 , m_pChildWin(pChildWin)
352 , m_aLayoutIdle("SfxInfoBarContainerWindow m_aLayoutIdle")
353 , m_bResizing(false)
354{
355 m_aLayoutIdle.SetPriority(TaskPriority::HIGHEST);
357}
358
359IMPL_LINK_NOARG(SfxInfoBarContainerWindow, DoUpdateLayout, Timer*, void) { m_pChildWin->Update(); }
360
362
364{
365 for (auto& infoBar : m_pInfoBars)
366 infoBar.disposeAndClear();
367 m_pInfoBars.clear();
368 Window::dispose();
369}
370
372 const OUString& sPrimaryMessage,
373 const OUString& sSecondaryMessage,
374 InfobarType ibType,
375 bool bShowCloseButton)
376{
377 if (!isInfobarEnabled(sId))
378 return nullptr;
379
380 auto pInfoBar = VclPtr<SfxInfoBarWindow>::Create(this, sId, sPrimaryMessage, sSecondaryMessage,
381 ibType, bShowCloseButton);
382
383 basegfx::BColor aBackgroundColor;
384 basegfx::BColor aForegroundColor;
385 basegfx::BColor aMessageColor;
386 GetInfoBarColors(ibType, aBackgroundColor, aForegroundColor, aMessageColor);
387 pInfoBar->m_aBackgroundColor = aBackgroundColor;
388 pInfoBar->m_aForegroundColor = aForegroundColor;
389 m_pInfoBars.push_back(pInfoBar);
390
391 Resize();
392 return pInfoBar;
393}
394
396{
397 for (auto const& infoBar : m_pInfoBars)
398 {
399 if (infoBar->getId() == sId)
400 return infoBar;
401 }
402 return nullptr;
403}
404
406{
407 return (getInfoBar(sId) != nullptr);
408}
409
411{
412 // Remove
413 auto it = std::find(m_pInfoBars.begin(), m_pInfoBars.end(), pInfoBar);
414 if (it != m_pInfoBars.end())
415 {
416 it->disposeAndClear();
417 m_pInfoBars.erase(it);
418 }
419
421}
422
424{
425 if (sId == u"readonly")
426 return officecfg::Office::UI::Infobar::Enabled::Readonly::get();
427 if (sId == u"signature")
428 return officecfg::Office::UI::Infobar::Enabled::Signature::get();
429 if (sId == u"donate")
430 return officecfg::Office::UI::Infobar::Enabled::Donate::get();
431 if (sId == u"getinvolved")
432 return officecfg::Office::UI::Infobar::Enabled::GetInvolved::get();
433 if (sId == u"hyphenationmissing")
434 return officecfg::Office::UI::Infobar::Enabled::HyphenationMissing::get();
435 if (sId == u"whatsnew")
436 return officecfg::Office::UI::Infobar::Enabled::WhatsNew::get();
437 if (sId == u"hiddentrackchanges")
438 return officecfg::Office::UI::Infobar::Enabled::HiddenTrackChanges::get();
439 if (sId == u"macro")
440 return officecfg::Office::UI::Infobar::Enabled::MacrosDisabled::get();
441
442 return true;
443}
444
445// This triggers the SfxFrame to re-layout its childwindows
447
449{
450 if (m_bResizing)
451 return;
452 m_bResizing = true;
453 const Size& rOrigSize = GetSizePixel();
454 auto nOrigWidth = rOrigSize.getWidth();
455 auto nOrigHeight = rOrigSize.getHeight();
456
457 tools::Long nHeight = 0;
458
459 for (auto& rxInfoBar : m_pInfoBars)
460 {
461 Size aOrigSize = rxInfoBar->GetSizePixel();
462 Size aSize(nOrigWidth, aOrigSize.Height());
463
464 Point aPos(0, nHeight);
465 // stage 1: provisionally size the infobar,
466 rxInfoBar->SetPosSizePixel(aPos, aSize);
467
468 // stage 2: perhaps allow height to stretch to fit
469 // the stage 1 width
470 aSize = rxInfoBar->DoLayout();
471 rxInfoBar->SetPosSizePixel(aPos, aSize);
472 rxInfoBar->Show();
473
474 // Stretch to fit the infobar(s)
475 nHeight += aSize.getHeight();
476 }
477
478 if (nOrigHeight != nHeight)
479 {
480 SetSizePixel(Size(nOrigWidth, nHeight));
482 }
483
484 m_bResizing = false;
485}
486
488
490 SfxBindings* pBindings, SfxChildWinInfo*)
491 : SfxChildWindow(_pParent, nId)
492 , m_pBindings(pBindings)
493{
495 GetWindow()->SetPosSizePixel(Point(0, 0), Size(_pParent->GetSizePixel().getWidth(), 0));
496 GetWindow()->Show();
497
499}
500
502
504{
506 return aInfo;
507}
508
510{
511 // Layout to current width, this may change the height
512 if (vcl::Window* pChild = GetWindow())
513 {
514 Size aSize(pChild->GetSizePixel());
515 pChild->Resize();
516 if (aSize == pChild->GetSizePixel())
517 return;
518 }
519
520 // Refresh the frame to take the infobars container height change into account
521 const sal_uInt16 nId = GetChildWindowId();
523 pVFrame->ShowChildWindow(nId);
524
525 // Give the focus to the document view
526 pVFrame->GetWindow().GrabFocusToDocument();
527}
528
529/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
basegfx::BColor getBColor() const
ExtraButton(weld::Container *pContainer, const OUString *pCommand)
Definition: infobar.cxx:164
std::unique_ptr< weld::Button > m_xButton
Definition: infobar.cxx:156
std::unique_ptr< weld::Builder > m_xBuilder
Definition: infobar.cxx:154
std::unique_ptr< weld::Container > m_xContainer
Definition: infobar.cxx:155
OUString m_aCommand
Definition: infobar.cxx:159
DECL_LINK(CommandHdl, weld::Button &, void)
weld::Button & get_widget()
Definition: infobar.cxx:184
rtl::Reference< weld::WidgetStatusListener > m_xStatusListener
StatusListener.
Definition: infobar.cxx:158
virtual void Start(bool bStartTimer=true) override
Size GetSizePixel() const
virtual void Resize() override
virtual void Layout()
virtual void dispose() override
std::unique_ptr< weld::Container > m_xContainer
void InitControlBase(weld::Widget *pWidget)
SfxDispatcher * GetDispatcher() const
Definition: bindings.hxx:172
void SetAlignment(SfxChildAlignment eAlign)
Definition: childwin.cxx:299
vcl::Window * GetWindow() const
Definition: childwin.hxx:117
virtual SfxChildWinInfo GetInfo() const
Definition: childwin.cxx:304
void SetWindow(const VclPtr< vcl::Window > &p)
Definition: childwin.hxx:111
SfxViewFrame * GetFrame() const
Returns a pointer to the <SfxViewFrame> instance, which belongs to this SfxDispatcher.
Definition: dispatch.cxx:557
SfxChildWindow for positioning the InfoBar in the view.
Definition: infobar.hxx:42
virtual ~SfxInfoBarContainerChild() override
Definition: infobar.cxx:501
SfxInfoBarContainerChild(vcl::Window *pParent, sal_uInt16 nId, SfxBindings *pBindings, SfxChildWinInfo *pInfo)
Definition: infobar.cxx:489
SfxBindings * m_pBindings
Definition: infobar.hxx:44
VclPtr< SfxInfoBarWindow > appendInfoBar(const OUString &sId, const OUString &sPrimaryMessage, const OUString &sSecondaryMessage, InfobarType ibType, bool bShowCloseButton)
Definition: infobar.cxx:371
std::vector< VclPtr< SfxInfoBarWindow > > m_pInfoBars
Definition: infobar.hxx:114
SfxInfoBarContainerWindow(SfxInfoBarContainerChild *pChildWin)
Definition: infobar.cxx:349
virtual ~SfxInfoBarContainerWindow() override
Definition: infobar.cxx:361
SfxInfoBarContainerChild * m_pChildWin
Definition: infobar.hxx:113
static bool isInfobarEnabled(std::u16string_view sId)
Definition: infobar.cxx:423
virtual void Resize() override
Definition: infobar.cxx:448
virtual void dispose() override
Definition: infobar.cxx:363
bool hasInfoBarWithID(std::u16string_view sId)
Definition: infobar.cxx:405
void removeInfoBar(VclPtr< SfxInfoBarWindow > const &pInfoBar)
Definition: infobar.cxx:410
VclPtr< SfxInfoBarWindow > getInfoBar(std::u16string_view sId)
Definition: infobar.cxx:395
Class representing a single InfoBar to be added in a SfxInfoBarContainerWindow.
Definition: infobar.hxx:61
std::unique_ptr< weld::Image > m_xImage
Definition: infobar.hxx:68
virtual void dispose() override
Definition: infobar.cxx:314
void SetForeAndBackgroundColors(InfobarType eType)
Definition: infobar.cxx:295
weld::Button & addButton(const OUString *pCommand=nullptr)
Add button to Infobar.
Definition: infobar.cxx:286
virtual void Layout() override
Definition: infobar.cxx:275
Size m_aMessageSize
Definition: infobar.hxx:65
std::unique_ptr< weld::TextView > m_xSecondaryMessage
Definition: infobar.hxx:70
Size m_aOrigMessageSize
Definition: infobar.hxx:66
void Update(const OUString &sPrimaryMessage, const OUString &sSecondaryMessage, InfobarType eType)
Definition: infobar.cxx:328
std::unique_ptr< weld::Toolbar > m_xCloseBtn
Definition: infobar.hxx:72
InfobarType m_eType
Definition: infobar.hxx:64
basegfx::BColor m_aForegroundColor
Definition: infobar.hxx:93
std::unique_ptr< weld::Label > m_xPrimaryMessage
Definition: infobar.hxx:69
void SetCloseButtonImage()
Definition: infobar.cxx:99
virtual ~SfxInfoBarWindow() override
Definition: infobar.cxx:293
std::vector< std::unique_ptr< ExtraButton > > m_aActionBtns
Definition: infobar.hxx:73
SfxInfoBarWindow(vcl::Window *parent, OUString sId, const OUString &sPrimaryMessage, const OUString &sSecondaryMessage, InfobarType InfobarType, bool bShowCloseButton)
Definition: infobar.cxx:192
std::unique_ptr< weld::Container > m_xButtonBox
Definition: infobar.hxx:71
basegfx::BColor m_aBackgroundColor
Definition: infobar.hxx:92
vcl::Window & GetWindow() const
Definition: viewfrm.cxx:2792
void ShowChildWindow(sal_uInt16, bool bVisible=true)
Definition: viewfrm.cxx:3557
constexpr tools::Long getHeight() const
constexpr tools::Long Height() const
constexpr tools::Long getWidth() const
constexpr tools::Long Width() const
const Color & GetDialogTextColor() const
bool GetHighContrastMode() const
const Color & GetLightColor() const
void SetPriority(TaskPriority ePriority)
void SetInvokeHandler(const Link< Timer *, void > &rLink)
static VclPtr< reference_type > Create(Arg &&... arg)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
void setClosed(bool bNew)
void SetStyle(WinBits nStyle)
virtual void SetSizePixel(const Size &rNewSize)
Size get_preferred_size() const
void GrabFocusToDocument()
WinBits GetStyle() const
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
virtual Size GetSizePixel() const
void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void EnableChildTransparentMode(bool bEnable=true)
float u
const EnumerationType m_eType
DocumentType eType
IMPL_LINK_NOARG(ExtraButton, CommandHdl, weld::Button &, void)
Definition: infobar.cxx:187
SFX_IMPL_POS_CHILDWINDOW_WITHID(SfxInfoBarContainerChild, SID_INFOBAR, SFX_OBJECTBAR_OBJECT)
IMPL_LINK(SfxInfoBarWindow, SizeAllocHdl, const Size &, rSize, void)
Definition: infobar.cxx:241
InfobarType
Definition: infobar.hxx:22
Sequence< sal_Int8 > aSeq
Definition: lnkbase2.cxx:83
bool dispatchCommand(const OUString &rCommand, const uno::Reference< css::frame::XFrame > &rFrame, const css::uno::Sequence< css::beans::PropertyValue > &rArguments, const uno::Reference< css::frame::XDispatchResultListener > &rListener)
std::unique_ptr< BaseProcessor2D > createProcessor2DFromOutputDevice(OutputDevice &rTargetOutDev, const drawinglayer::geometry::ViewInformation2D &rViewInformation2D)
long Long
#define SFX_OBJECTBAR_OBJECT
Definition: objface.hxx:34
sal_Int16 nId
OUString sId
WinBits const WB_DIALOGCONTROL