android: Update app-specific/MIME type icons
[LibreOffice.git] / sd / source / ui / uitest / uiobject.cxx
blob403aa8555ca156c309f1c943c0d3b8cd6fcd3ca5
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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/.
8 */
10 #include <memory>
11 #include <uiobject.hxx>
13 #include <Window.hxx>
14 #include <DrawViewShell.hxx>
15 #include <sdpage.hxx>
17 #include <sfx2/sidebar/Sidebar.hxx>
18 #include <sfx2/sfxsids.hrc>
19 #include <svx/uiobject.hxx>
20 #include <tools/debug.hxx>
21 #include <utility>
23 namespace
25 class ImpressSdrObject : public SdrUIObject
27 public:
28 ImpressSdrObject(const VclPtr<sd::Window>& xImpressWin, OUString aName);
30 SdrObject* get_object() override;
32 private:
33 VclPtr<sd::Window> mxWindow;
35 OUString maName;
38 sd::DrawViewShell* getViewShell(const VclPtr<sd::Window>& xWindow)
40 sd::DrawViewShell* pViewShell = dynamic_cast<sd::DrawViewShell*>(xWindow->GetViewShell());
41 assert(pViewShell);
43 return pViewShell;
46 OUString getObjectName(SdrObject const* pObject)
48 if (pObject->GetName().isEmpty())
49 return "Unnamed Drawinglayer object " + OUString::number(pObject->GetOrdNum());
50 else
51 return pObject->GetName();
54 SdrObject* getObject(const VclPtr<sd::Window>& xWindow, std::u16string_view rName)
56 SdrPage* pPage = getViewShell(xWindow)->getCurrentPage();
58 if (!pPage)
59 return nullptr;
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))
66 return pObj;
69 return nullptr;
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)
83 , mxWindow(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());
95 return aMap;
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();
148 else
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;
162 if (!pPage)
163 return 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));
172 return aRet;
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);
180 assert(pWin);
181 return std::unique_ptr<UIObject>(new ImpressWindowUIObject(pWin));
184 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */