1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
11 #include <uiobject.hxx>
14 #include <DrawViewShell.hxx>
17 #include <sfx2/sidebar/Sidebar.hxx>
18 #include <sfx2/sfxsids.hrc>
19 #include <svx/uiobject.hxx>
20 #include <tools/debug.hxx>
25 class ImpressSdrObject
: public SdrUIObject
28 ImpressSdrObject(const VclPtr
<sd::Window
>& xImpressWin
, OUString aName
);
30 SdrObject
* get_object() override
;
33 VclPtr
<sd::Window
> mxWindow
;
38 sd::DrawViewShell
* getViewShell(const VclPtr
<sd::Window
>& xWindow
)
40 sd::DrawViewShell
* pViewShell
= dynamic_cast<sd::DrawViewShell
*>(xWindow
->GetViewShell());
46 OUString
getObjectName(SdrObject
const* pObject
)
48 if (pObject
->GetName().isEmpty())
49 return "Unnamed Drawinglayer object " + OUString::number(pObject
->GetOrdNum());
51 return pObject
->GetName();
54 SdrObject
* getObject(const VclPtr
<sd::Window
>& xWindow
, std::u16string_view rName
)
56 SdrPage
* pPage
= getViewShell(xWindow
)->getCurrentPage();
61 size_t nObjs
= pPage
->GetObjCount();
62 for (size_t i
= 0; i
< nObjs
; ++i
)
64 SdrObject
* pObj
= pPage
->GetObj(i
);
65 if (rName
== getObjectName(pObj
))
73 ImpressSdrObject::ImpressSdrObject(const VclPtr
<sd::Window
>& xImpressWin
, OUString aName
)
74 : mxWindow(xImpressWin
)
75 , maName(std::move(aName
))
79 SdrObject
* ImpressSdrObject::get_object() { return getObject(mxWindow
, maName
); }
81 ImpressWindowUIObject::ImpressWindowUIObject(const VclPtr
<sd::Window
>& xWindow
)
82 : WindowUIObject(xWindow
)
87 StringMap
ImpressWindowUIObject::get_state()
89 StringMap aMap
= WindowUIObject::get_state();
91 aMap
["SelectedText"] = getViewShell(mxWindow
)->GetSelectionText(false);
92 aMap
["CurrentSlide"] = OUString::number(getViewShell(mxWindow
)->GetCurPagePos() + 1);
93 aMap
["Zoom"] = OUString::number(getViewShell(mxWindow
)->GetZoom());
98 void ImpressWindowUIObject::execute(const OUString
& rAction
, const StringMap
& rParameters
)
100 if (rAction
== "SET")
102 if (rParameters
.find("ZOOM") != rParameters
.end())
104 auto itr
= rParameters
.find("ZOOM");
105 OUString aVal
= itr
->second
;
106 sal_Int32 nVal
= aVal
.toInt32();
107 getViewShell(mxWindow
)->SetZoom(nVal
);
110 else if (rAction
== "GOTO")
112 if (rParameters
.find("PAGE") != rParameters
.end())
114 auto itr
= rParameters
.find("PAGE");
115 OUString aVal
= itr
->second
;
116 sal_Int32 nVal
= aVal
.toInt32();
117 getViewShell(mxWindow
)->SwitchPage(nVal
- 1);
120 else if (rAction
== "SELECT")
122 if (rParameters
.find("OBJECT") != rParameters
.end())
124 auto itr
= rParameters
.find("OBJECT");
125 OUString aName
= itr
->second
;
126 SdrObject
* pObj
= getObject(mxWindow
, aName
);
127 SdrPageView
* pPageView
= getViewShell(mxWindow
)->GetView()->GetSdrPageView();
128 getViewShell(mxWindow
)->GetView()->MarkObj(pObj
, pPageView
);
131 else if (rAction
== "SIDEBAR")
133 SfxViewFrame
* pViewFrm
= SfxViewFrame::Current();
134 DBG_ASSERT(pViewFrm
, "ImpressWindowUIObject::execute: no viewframe");
135 pViewFrm
->ShowChildWindow(SID_SIDEBAR
);
137 auto itr
= rParameters
.find("PANEL");
138 if (itr
!= rParameters
.end())
140 OUString aVal
= itr
->second
;
141 ::sfx2::sidebar::Sidebar::ShowPanel(aVal
, pViewFrm
->GetFrame().GetFrameInterface());
144 else if (rAction
== "DESELECT")
146 getViewShell(mxWindow
)->GetView()->UnMarkAll();
149 WindowUIObject::execute(rAction
, rParameters
);
152 std::unique_ptr
<UIObject
> ImpressWindowUIObject::get_child(const OUString
& rID
)
154 return std::unique_ptr
<UIObject
>(new ImpressSdrObject(mxWindow
, rID
));
157 std::set
<OUString
> ImpressWindowUIObject::get_children() const
159 SdrPage
* pPage
= getViewShell(mxWindow
)->getCurrentPage();
161 std::set
<OUString
> aRet
;
165 size_t nObjs
= pPage
->GetObjCount();
166 for (size_t i
= 0; i
< nObjs
; ++i
)
168 SdrObject
* pObject
= pPage
->GetObj(i
);
169 aRet
.insert(getObjectName(pObject
));
175 OUString
ImpressWindowUIObject::get_name() const { return "ImpressWindowUIObject"; }
177 std::unique_ptr
<UIObject
> ImpressWindowUIObject::create(vcl::Window
* pWindow
)
179 sd::Window
* pWin
= dynamic_cast<sd::Window
*>(pWindow
);
181 return std::unique_ptr
<UIObject
>(new ImpressWindowUIObject(pWin
));
184 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */