diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2020-07-02 11:01:54 +0200 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2020-07-15 15:08:12 +0200 |
commit | d41b79f1051a8dff638732e737d250eef56d5378 (patch) | |
tree | a97214ecf87431b13b2017bd7bda3b9bd2eac5de /vcl/jsdialog | |
parent | 07ad277ce32410d02dca9933c005bac7fe0ce972 (diff) |
jsdialog: move executor code to vcl
Change-Id: I9247a652707fe3239dc488a605a2c506d8eec95c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97736
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98819
Tested-by: Jenkins
Diffstat (limited to 'vcl/jsdialog')
-rw-r--r-- | vcl/jsdialog/executor.cxx | 141 | ||||
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 9 |
2 files changed, 144 insertions, 6 deletions
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx new file mode 100644 index 000000000000..1df6af10c9c6 --- /dev/null +++ b/vcl/jsdialog/executor.cxx @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * 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 <jsdialog/jsdialogbuilder.hxx> +#include <vcl/weld.hxx> +#include <vcl/jsdialog/executor.hxx> +#include <sal/log.hxx> + +namespace jsdialog +{ +bool ExecuteAction(sal_uInt64 nWindowId, const OString& rWidget, StringMap& rData) +{ + weld::Widget* pWidget = JSInstanceBuilder::FindWeldWidgetsMap(nWindowId, rWidget); + + if (pWidget != nullptr) + { + OUString sControlType = rData["type"]; + OUString sAction = rData["cmd"]; + + if (sControlType == "tabcontrol") + { + auto pNotebook = dynamic_cast<weld::Notebook*>(pWidget); + if (pNotebook) + { + if (sAction == "selecttab") + { + OString pageId = OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US); + int page = std::atoi(pageId.getStr()); + + pNotebook->set_current_page(page); + + return true; + } + } + } + else if (sControlType == "combobox") + { + auto pCombobox = dynamic_cast<weld::ComboBox*>(pWidget); + if (pCombobox) + { + if (sAction == "selected") + { + int separatorPos = rData["data"].indexOf(';'); + if (separatorPos) + { + OUString entryPos = rData["data"].copy(0, separatorPos); + OString posString = OUStringToOString(entryPos, RTL_TEXTENCODING_ASCII_US); + int pos = std::atoi(posString.getStr()); + pCombobox->set_active(pos); + LOKTrigger::trigger_changed(*pCombobox); + return true; + } + } + else if (sAction == "change") + { + pCombobox->set_entry_text(rData["data"]); + LOKTrigger::trigger_changed(*pCombobox); + return true; + } + } + } + else if (sControlType == "pushbutton") + { + auto pButton = dynamic_cast<weld::Button*>(pWidget); + if (pButton) + { + if (sAction == "click") + { + pButton->clicked(); + return true; + } + } + } + else if (sControlType == "drawingarea") + { + auto pArea = dynamic_cast<weld::DrawingArea*>(pWidget); + if (pArea) + { + if (sAction == "click") + { + LOKTrigger::trigger_click(*pArea, Point(10, 10)); + return true; + } + } + } + else if (sControlType == "spinfield") + { + auto pSpinField = dynamic_cast<weld::SpinButton*>(pWidget); + if (pSpinField) + { + if (sAction == "plus") + { + pSpinField->set_value(pSpinField->get_value() + 1); + return true; + } + else if (sAction == "minus") + { + pSpinField->set_value(pSpinField->get_value() - 1); + return true; + } + } + } + else if (sControlType == "toolbox") + { + auto pToolbar = dynamic_cast<weld::Toolbar*>(pWidget); + if (pToolbar) + { + if (sAction == "click") + { + LOKTrigger::trigger_clicked( + *pToolbar, OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US)); + return true; + } + } + } + else if (sControlType == "edit") + { + auto pEdit = dynamic_cast<weld::Entry*>(pWidget); + if (pEdit) + { + if (sAction == "change") + { + pEdit->set_text(rData["data"]); + LOKTrigger::trigger_changed(*pEdit); + return true; + } + } + } + } + + return false; +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index cf37b9593880..aed000927a2a 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -124,13 +124,11 @@ std::map<sal_uInt64, WidgetMap>& JSInstanceBuilder::GetLOKWeldWidgetsMap() return s_aLOKWeldBuildersMap; } -namespace jsdialog +weld::Widget* JSInstanceBuilder::FindWeldWidgetsMap(sal_uInt64 nWindowId, const OString& rWidget) { -weld::Widget* FindWeldWidgetsMap(sal_uInt64 nWindowId, const OString& rWidget) -{ - const auto it = JSInstanceBuilder::GetLOKWeldWidgetsMap().find(nWindowId); + const auto it = GetLOKWeldWidgetsMap().find(nWindowId); - if (it != JSInstanceBuilder::GetLOKWeldWidgetsMap().end()) + if (it != GetLOKWeldWidgetsMap().end()) { auto widgetIt = it->second.find(rWidget); if (widgetIt != it->second.end()) @@ -139,7 +137,6 @@ weld::Widget* FindWeldWidgetsMap(sal_uInt64 nWindowId, const OString& rWidget) return nullptr; } -} void JSInstanceBuilder::InsertWindowToMap(sal_uInt64 nWindowId) { |