summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2020-07-02 11:01:54 +0200
committerSzymon Kłos <szymon.klos@collabora.com>2020-07-15 15:08:12 +0200
commitd41b79f1051a8dff638732e737d250eef56d5378 (patch)
treea97214ecf87431b13b2017bd7bda3b9bd2eac5de /desktop
parent07ad277ce32410d02dca9933c005bac7fe0ce972 (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 'desktop')
-rw-r--r--desktop/source/lib/init.cxx162
1 files changed, 6 insertions, 156 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 7365e52db5a2..665f4d56628f 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -151,7 +151,7 @@
#include <vcl/abstdlg.hxx>
#include <tools/diagnose_ex.h>
#include <vcl/uitest/uiobject.hxx>
-#include <vcl/jsdialog/builder.hxx>
+#include <vcl/jsdialog/executor.hxx>
// Needed for getUndoManager()
#include <com/sun/star/document/XUndoManager.hpp>
@@ -188,30 +188,6 @@ static void SetLastExceptionMsg(const OUString& s = OUString())
gImpl->maLastExceptionMsg = s;
}
-class LOKTrigger
-{
-public:
- static void trigger_changed(weld::Entry& rEdit)
- {
- rEdit.signal_changed();
- }
-
- static void trigger_changed(weld::ComboBox& rComboBox)
- {
- rComboBox.signal_changed();
- }
-
- static void trigger_clicked(weld::Toolbar& rToolbar, const OString& rIdent)
- {
- rToolbar.signal_clicked(rIdent);
- }
-
- static void trigger_click(weld::DrawingArea& rDrawingArea, const Point& rPos)
- {
- rDrawingArea.click(rPos);
- }
-};
-
namespace {
struct ExtensionMap
@@ -3653,137 +3629,11 @@ static void doc_sendDialogEvent(LibreOfficeKitDocument* /*pThis*/, unsigned long
try
{
OString sControlId = OUStringToOString(aMap["id"], RTL_TEXTENCODING_ASCII_US);
- weld::Widget* pWidget = jsdialog::FindWeldWidgetsMap(nWindowId, sControlId);
- if (!pWidget && nWindowId == 0)
- {
- pWidget = jsdialog::FindWeldWidgetsMap(reinterpret_cast<sal_uInt64>(SfxViewShell::Current()), sControlId);
- }
-
- bIsWeldedDialog = pWidget != nullptr;
- bool bContinueWithLOKWindow = false;
-
- if (bIsWeldedDialog)
- {
- OUString sControlType = aMap["type"];
- OUString sAction = aMap["cmd"];
- if (sControlType == "tabcontrol")
- {
- auto pNotebook = dynamic_cast<weld::Notebook*>(pWidget);
- if (pNotebook)
- {
- if (sAction == "selecttab")
- {
- OString pageId = OUStringToOString(aMap["data"], RTL_TEXTENCODING_ASCII_US);
- int page = std::atoi(pageId.getStr());
-
- pNotebook->set_current_page(page);
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "combobox")
- {
- auto pCombobox = dynamic_cast<weld::ComboBox*>(pWidget);
- if (pCombobox)
- {
- if (sAction == "selected")
- {
- int separatorPos = aMap["data"].indexOf(';');
- if (separatorPos)
- {
- OUString entryPos = aMap["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);
- }
- }
- else if (sAction == "change")
- {
- pCombobox->set_entry_text(aMap["data"]);
- LOKTrigger::trigger_changed(*pCombobox);
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "pushbutton")
- {
- auto pButton = dynamic_cast<weld::Button*>(pWidget);
- if (pButton)
- {
- if (sAction == "click")
- {
- pButton->clicked();
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "drawingarea")
- {
- auto pArea = dynamic_cast<weld::DrawingArea*>(pWidget);
- if (pArea)
- {
- if (sAction == "click")
- {
- LOKTrigger::trigger_click(*pArea, Point(10, 10));
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "spinfield")
- {
- auto pSpinField = dynamic_cast<weld::SpinButton*>(pWidget);
- if (pSpinField)
- {
- if (sAction == "plus")
- {
- pSpinField->set_value(pSpinField->get_value() + 1);
- }
- else if (sAction == "minus")
- {
- pSpinField->set_value(pSpinField->get_value() - 1);
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "toolbox")
- {
- auto pToolbar = dynamic_cast<weld::Toolbar*>(pWidget);
- if (pToolbar)
- {
- if (sAction == "click")
- {
- LOKTrigger::trigger_clicked(*pToolbar, OUStringToOString(aMap["data"], RTL_TEXTENCODING_ASCII_US));
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else if (sControlType == "edit")
- {
- auto pEdit = dynamic_cast<weld::Entry*>(pWidget);
- if (pEdit)
- {
- if (sAction == "change")
- {
- pEdit->set_text(aMap["data"]);
- LOKTrigger::trigger_changed(*pEdit);
- }
- else
- bContinueWithLOKWindow = true;
- }
- }
- else
- {
- bContinueWithLOKWindow = true;
- }
- }
+ bIsWeldedDialog = jsdialog::ExecuteAction(nWindowId, sControlId, aMap);
+ if (!bIsWeldedDialog)
+ bIsWeldedDialog = jsdialog::ExecuteAction(reinterpret_cast<sal_uInt64>(SfxViewShell::Current()),
+ sControlId, aMap);
if (!pWindow)
{
@@ -3791,7 +3641,7 @@ static void doc_sendDialogEvent(LibreOfficeKitDocument* /*pThis*/, unsigned long
return;
}
- if (!bIsWeldedDialog || bContinueWithLOKWindow)
+ if (!bIsWeldedDialog)
{
WindowUIObject aUIObject(pWindow);
std::unique_ptr<UIObject> pUIWindow(aUIObject.get_child(aMap["id"]));