diff options
Diffstat (limited to 'starmath/source/uiobject.cxx')
-rw-r--r-- | starmath/source/uiobject.cxx | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/starmath/source/uiobject.cxx b/starmath/source/uiobject.cxx new file mode 100644 index 000000000..a6f0c47cb --- /dev/null +++ b/starmath/source/uiobject.cxx @@ -0,0 +1,109 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <memory> +#include "uiobject.hxx" +#include <vcl/layout.hxx> +#include <ElementsDockingWindow.hxx> + +ElementUIObject::ElementUIObject(SmElementsControl* pElementSelector, + const OUString& rID): + mpElementsSelector(pElementSelector), + maID(rID) +{ +} + +SmElement* ElementUIObject::get_element() +{ + sal_uInt32 nID = maID.toUInt32(); + size_t n = mpElementsSelector->maElementList.size(); + if (nID >= n) + return nullptr; + + return mpElementsSelector->maElementList[nID].get(); +} + +StringMap ElementUIObject::get_state() +{ + StringMap aMap; + aMap["ID"] = maID; + + SmElement* pElement = get_element(); + if (pElement) + aMap["Text"] = pElement->getText(); + + return aMap; +} + +void ElementUIObject::execute(const OUString& rAction, + const StringMap& /*rParameters*/) +{ + if (rAction == "SELECT") + { + SmElement* pElement = get_element(); + if (pElement) + mpElementsSelector->maSelectHdlLink.Call(*pElement); + } +} + +ElementSelectorUIObject::ElementSelectorUIObject(vcl::Window* pElementSelectorWindow, SmElementsControl* pElementSelector) + : WindowUIObject(pElementSelectorWindow) + , mpElementsSelector(pElementSelector) +{ +} + +StringMap ElementSelectorUIObject::get_state() +{ + StringMap aMap = WindowUIObject::get_state(); + + SmElement* pElement = mpElementsSelector->current(); + if (pElement) + aMap["CurrentEntry"] = pElement->getText(); + + aMap["CurrentSelection"] = OUString::fromUtf8(mpElementsSelector->msCurrentSetId); + + return aMap; +} + +std::unique_ptr<UIObject> ElementSelectorUIObject::get_child(const OUString& rID) +{ + size_t nID = rID.toInt32(); + size_t n = mpElementsSelector->maElementList.size(); + if (nID >= n) + throw css::uno::RuntimeException("invalid id"); + + return std::unique_ptr<UIObject>(new ElementUIObject(mpElementsSelector, rID)); +} + +std::set<OUString> ElementSelectorUIObject::get_children() const +{ + std::set<OUString> aChildren; + + size_t n = mpElementsSelector->maElementList.size(); + for (size_t i = 0; i < n; ++i) + { + aChildren.insert(OUString::number(i)); + } + + return aChildren; +} + +std::unique_ptr<UIObject> ElementSelectorUIObject::create(vcl::Window* pWindow) +{ + VclDrawingArea* pSmElementsWin = dynamic_cast<VclDrawingArea*>(pWindow); + assert(pSmElementsWin); + return std::unique_ptr<UIObject>(new ElementSelectorUIObject(pSmElementsWin, static_cast<SmElementsControl*>(pSmElementsWin->GetUserData()))); +} + +OUString ElementSelectorUIObject::get_name() const +{ + return "SmElementSelector"; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |