[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2023-11-22 Thread Gülşah Köse (via logerrit)
 vcl/inc/wizdlg.hxx   |1 
 vcl/jsdialog/jsdialogbuilder.cxx |7 
 vcl/source/control/roadmapwizard.cxx |   56 +--
 vcl/source/control/wizardmachine.cxx |7 
 vcl/source/control/wizimpldata.hxx   |   47 +
 5 files changed, 71 insertions(+), 47 deletions(-)

New commits:
commit a6fffac0336fa7d5843f73139ec88a5eef8269d5
Author: Gülşah Köse 
AuthorDate: Fri Nov 10 11:32:34 2023 +0300
Commit: Gülşah Köse 
CommitDate: Wed Nov 22 13:46:39 2023 +0100

Online: Fix Wizard Help button

Wizard dialog help button's response is not initialized if we don't run
any other dialogs. It should be initialized in RoadmapWizard itself.

response_help function can not detect wizard dialog's Help button. So we
should handle this case in function too.

Signed-off-by: Gülşah Köse 
Change-Id: If80a2e54dcbf5eaa3d0e07347d12296ace5c9569
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159282
Reviewed-by: Szymon Kłos 
Tested-by: Jenkins

diff --git a/vcl/inc/wizdlg.hxx b/vcl/inc/wizdlg.hxx
index 4416ed2e5891..56a9ed5261d7 100644
--- a/vcl/inc/wizdlg.hxx
+++ b/vcl/inc/wizdlg.hxx
@@ -128,6 +128,7 @@ namespace vcl
 
 voidAddButton( Button* pButton, tools::Long nOffset = 
0 );
 voidRemoveButton( Button* pButton );
+voidAddButtonResponse( Button* pButton, int response);
 
 voidSetPageSizePixel( const Size& rSize ) { maPageSize 
= rSize; }
 const Size& GetPageSizePixel() const { return maPageSize; }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 151928f873f6..48946baa15f9 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -54,7 +54,14 @@ void response_help(vcl::Window* pWindow)
 vcl::Window* pButtonWindow = pDialog->get_widget_for_response(RET_HELP);
 ::Button* pButton = dynamic_cast<::Button*>(pButtonWindow);
 if (!pButton)
+{
+// Is it a wizard dialog?
+vcl::RoadmapWizard* pWizard = 
dynamic_cast(pWindow);
+if (!pWizard || !pWizard->m_pHelp)
+return;
+pWizard->m_pHelp->Click();
 return;
+}
 
 pButton->Click();
 }
diff --git a/vcl/source/control/roadmapwizard.cxx 
b/vcl/source/control/roadmapwizard.cxx
index 846e6f2ee2f3..1b3c9e96b477 100644
--- a/vcl/source/control/roadmapwizard.cxx
+++ b/vcl/source/control/roadmapwizard.cxx
@@ -28,59 +28,12 @@
 #include 
 
 #include 
-#include 
-#include 
 
 #include "wizimpldata.hxx"
 #include 
 
 namespace vcl
 {
-using namespace RoadmapWizardTypes;
-
-namespace
-{
-typedef ::std::set< WizardTypes::WizardState > StateSet;
-
-typedef ::std::map<
-PathId,
-WizardPath
-> Paths;
-
-typedef ::std::map<
-WizardTypes::WizardState,
-::std::pair<
-OUString,
-RoadmapPageFactory
->
-> StateDescriptions;
-}
-
-struct RoadmapWizardImpl
-{
-ScopedVclPtr pRoadmap;
-Paths   aPaths;
-PathId  nActivePath;
-StateDescriptions   aStateDescriptors;
-StateSetaDisabledStates;
-boolbActivePathIsDefinite;
-
-RoadmapWizardImpl()
-:pRoadmap( nullptr )
-,nActivePath( -1 )
-,bActivePathIsDefinite( false )
-{
-}
-
-/// returns the index of the current state in given path, or -1
-static sal_Int32 getStateIndexInPath( WizardTypes::WizardState 
_nState, const WizardPath& _rPath );
-/// returns the index of the current state in the path with the given 
id, or -1
-sal_Int32 getStateIndexInPath( WizardTypes::WizardState _nState, 
PathId _nPathId );
-/// returns the index of the first state in which the two given paths 
differ
-static sal_Int32 getFirstDifferentIndex( const WizardPath& _rLHS, 
const WizardPath& _rRHS );
-};
-
-
 sal_Int32 RoadmapWizardImpl::getStateIndexInPath( WizardTypes::WizardState 
_nState, const WizardPath& _rPath )
 {
 sal_Int32 nStateIndexInPath = 0;
@@ -818,6 +771,15 @@ namespace vcl
 sal_Int32 nStartPos = sDialogId.lastIndexOf('/');
 nStartPos = nStartPos >= 0 ? nStartPos + 1 : 0;
 rJsonWriter.put("dialogid", sDialogId.copy(nStartPos));
+{
+auto aResponses = rJsonWriter.startArray("responses");
+for (const auto& rResponse : m_xRoadmapImpl->maResponses)
+{
+auto aResponse = rJsonWriter.startStruct();
+rJsonWriter.put("id", rResponse.first->get_id());
+rJsonWriter.put("response", rResponse.second);
+}
+}
 
 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2023-08-29 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |2 
 vcl/jsdialog/executor.cxx|7 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   75 +++
 3 files changed, 59 insertions(+), 25 deletions(-)

New commits:
commit af0f610f90b315c20773c39579b70fb6e456412b
Author: Szymon Kłos 
AuthorDate: Tue Aug 8 06:56:14 2023 +0200
Commit: Szymon Kłos 
CommitDate: Tue Aug 29 13:51:45 2023 +0200

jsdialog: rendering of custom entries in combobox

Change-Id: I22cca2e89c38d927a21a39886b795f42c1546afc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155854
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Caolán McNamara 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156243
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index e4aa60558438..dc6e04c3eb4e 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -620,6 +620,8 @@ public:
 virtual void set_entry_text(const OUString& rText) override;
 virtual void set_active(int pos) override;
 virtual bool changed_by_direct_pick() const override;
+
+void render_entry(int pos);
 };
 
 class JSNotebook final : public JSWidget
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 25e1af80b324..57a1c4db22d8 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -129,6 +129,13 @@ bool ExecuteAction(const OUString& nWindowId, const 
OUString& rWidget, StringMap
 LOKTrigger::trigger_changed(*pCombobox);
 return true;
 }
+else if (sAction == "render_entry")
+{
+auto pJSCombobox = dynamic_cast(pWidget);
+if (pJSCombobox)
+
pJSCombobox->render_entry(o3tl::toInt32(rData["data"]));
+return true;
+}
 }
 }
 else if (sControlType == "pushbutton")
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 34b28184cc16..40f014d7cdc5 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -7,25 +7,35 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include 
+
+#include 
+#include 
+#include 
+
 #include 
+#include 
+#include 
+#include 
+#include 
 #include 
-#include 
+
+#include 
+#include 
+
 #include 
+
+#include 
+#include 
 #include 
+#include 
 #include 
-#include 
-#include 
 #include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
+#include 
 #include 
-#include 
-#include 
+#include 
+
+#include 
 #include 
 
 static std::map& GetLOKPopupsMap()
@@ -95,17 +105,6 @@ void JSDialogNotifyIdle::send(tools::JsonWriter& 
aJsonWriter)
 }
 }
 
-namespace
-{
-OUString extractActionType(const jsdialog::ActionDataMap& rData)
-{
-auto it = rData.find(ACTION_TYPE);
-if (it != rData.end())
-return it->second;
-return "";
-}
-};
-
 void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType eType, 
VclPtr pWindow,
  std::unique_ptr 
pData)
 {
@@ -119,8 +118,8 @@ void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType 
eType, VclPtrm_eType == eType && it->m_pWindow == pWindow)
 {
-if (it->m_pData && pData
-&& extractActionType(*it->m_pData) != 
extractActionType(*pData))
+// actions should be always sent, eg. renrering of custom entries 
in combobox
+if (eType == jsdialog::MessageType::Action)
 {
 it++;
 continue;
@@ -1662,6 +1661,32 @@ void JSComboBox::set_active(int pos)
 
 bool JSComboBox::changed_by_direct_pick() const { return true; }
 
+void JSComboBox::render_entry(int pos)
+{
+ScopedVclPtrInstance pDevice;
+Size aRenderSize = signal_custom_get_size(*pDevice);
+pDevice->SetOutputSize(aRenderSize);
+
+signal_custom_render(*pDevice, tools::Rectangle(Point(0, 0), aRenderSize), 
false, get_id(pos));
+
+BitmapEx aImage = pDevice->GetBitmapEx(Point(0, 0), aRenderSize);
+
+SvMemoryStream aOStm(65535, 65535);
+if (GraphicConverter::Export(aOStm, aImage, ConvertDataFormat::PNG) == 
ERRCODE_NONE)
+{
+css::uno::Sequence aSeq(static_cast(aOStm.GetData()),
+  aOStm.Tell());
+OUStringBuffer aBuffer("data:image/png;base64,");
+::comphelper::Base64::encode(aBuffer, aSeq);
+
+std::unique_ptr pMap = 
std::make_unique();
+(*pMap)[ACTION_TYPE] = "rendered_combobox_entry";
+(*pMap)["pos"] = OUString::number(pos);
+(*pMap)["image"] = aBuffer;
+sendAction(std::move(pMap));
+}
+}
+
 JSNotebook::JSNotebook(JSDialogSender* pSender, ::TabControl* pControl,
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2023-05-12 Thread Attila Szűcs (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 
 vcl/jsdialog/executor.cxx|   10 --
 vcl/jsdialog/jsdialogbuilder.cxx |   35 +--
 3 files changed, 45 insertions(+), 4 deletions(-)

New commits:
commit 6be76f54a4e94b952975dfded25afff60257c6dd
Author: Attila Szűcs 
AuthorDate: Wed May 3 04:30:55 2023 +0200
Commit: Szymon Kłos 
CommitDate: Fri May 12 17:25:36 2023 +0200

LOK: Navi-4 tree dblclick

Removed sendUpdate that was called 1/sec, so selection dont revert 1/sec.
Put sendUpdate into set_cursor(), that seems to be a better spot.

Fixed set_cursor usage in executor, that caused slection to not work
in dblclick at all.
Because set_cursor(int) use not absolute position, but relative to parent
And root was used as parent, so it picked SwContent from the 1. lvl,
but the 1. lvl items are not real items, just SwContentTypes ..
e.g.:Headings.. that cannot be activated.. so never happened anything.

Change-Id: Iea373af3a0832a4f97202122bd36022eddf26efe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151308
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151703
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 27ac31784228..4d38d66fe9f1 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -749,6 +749,10 @@ public:
 virtual void expand_row(const weld::TreeIter& rIter) override;
 virtual void collapse_row(const weld::TreeIter& rIter) override;
 
+virtual void set_cursor(const weld::TreeIter& rIter) override;
+void set_cursor_without_notify(const weld::TreeIter& rIter);
+virtual void set_cursor(int pos) override;
+
 using SalInstanceTreeView::remove;
 virtual void remove(int pos) override;
 virtual void remove(const weld::TreeIter& rIter) override;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 2784acf0cae8..af514bc70dde 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -441,7 +441,8 @@ bool ExecuteAction(const OUString& nWindowId, const 
OUString& rWidget, StringMap
 std::unique_ptr 
itEntry(pTreeView->make_iterator());
 pTreeView->get_iter_abs_pos(*itEntry, nAbsPos);
 pTreeView->select(*itEntry);
-pTreeView->set_cursor(*itEntry);
+pTreeView->set_cursor_without_notify(*itEntry);
+pTreeView->grab_focus();
 LOKTrigger::trigger_changed(*pTreeView);
 return true;
 }
@@ -450,8 +451,11 @@ bool ExecuteAction(const OUString& nWindowId, const 
OUString& rWidget, StringMap
 sal_Int32 nRow = o3tl::toInt32(rData["data"]);
 
 pTreeView->unselect_all();
+std::unique_ptr 
itEntry(pTreeView->make_iterator());
+pTreeView->get_iter_abs_pos(*itEntry, nRow);
 pTreeView->select(nRow);
-pTreeView->set_cursor(nRow);
+pTreeView->set_cursor_without_notify(*itEntry);
+pTreeView->grab_focus();
 LOKTrigger::trigger_changed(*pTreeView);
 LOKTrigger::trigger_row_activated(*pTreeView);
 return true;
@@ -461,6 +465,8 @@ bool ExecuteAction(const OUString& nWindowId, const 
OUString& rWidget, StringMap
 sal_Int32 nAbsPos = o3tl::toInt32(rData["data"]);
 std::unique_ptr 
itEntry(pTreeView->make_iterator());
 pTreeView->get_iter_abs_pos(*itEntry, nAbsPos);
+pTreeView->set_cursor_without_notify(*itEntry);
+pTreeView->grab_focus();
 pTreeView->expand_row(*itEntry);
 return true;
 }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index ed3a0893dbcb..a3c55e28ddfb 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -2016,16 +2016,47 @@ void JSTreeView::clear()
 sendUpdate();
 }
 
+void JSTreeView::set_cursor_without_notify(const weld::TreeIter& rIter)
+{
+SalInstanceTreeView::set_cursor(rIter);
+}
+
+void JSTreeView::set_cursor(const weld::TreeIter& rIter)
+{
+SalInstanceTreeView::set_cursor(rIter);
+sendUpdate();
+}
+
+void JSTreeView::set_cursor(int pos)
+{
+SalInstanceTreeView::set_cursor(pos);
+sendUpdate();
+}
+
 void JSTreeView::expand_row(const weld::TreeIter& rIter)
 {
+bool bNotify = false;
+const SalInstanceTreeIter& rVclIter = static_cast(rIter);
+if (!m_xTreeView->IsExpanded(rVclIter.iter))
+bNotify = true;
+
 SalInstanceTreeView::expand_row(rIter);
-sendUpdate();
+
+if (bNotify)
+  

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2023-03-21 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/executor.cxx|7 +--
 vcl/jsdialog/jsdialogbuilder.cxx |5 +
 3 files changed, 11 insertions(+), 2 deletions(-)

New commits:
commit 33f97ddd549b4ebd72b5fea327378667d55796ff
Author: Szymon Kłos 
AuthorDate: Thu Mar 9 12:04:36 2023 +0100
Commit: Szymon Kłos 
CommitDate: Tue Mar 21 12:36:31 2023 +

jsdialog: set text for textview on every key press

for that we need to set text without sending back notification
to not disturb user in typing

we need to keep the selection at the same place

Signed-off-by: Szymon Kłos 
Change-Id: Ib5c4a53e61dbc2cf28d450fb44fc5a2957ff57b6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148533
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149191
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 19458a938c02..0c6cbaa48080 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -666,6 +666,7 @@ public:
 JSTextView(JSDialogSender* pSender, ::VclMultiLineEdit* pTextView, 
SalInstanceBuilder* pBuilder,
bool bTakeOwnership);
 virtual void set_text(const OUString& rText) override;
+void set_text_without_notify(const OUString& rText);
 virtual void replace_selection(const OUString& rText) override;
 };
 
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 5598afa8ba19..e0d0cbb323f3 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -361,12 +361,15 @@ bool ExecuteAction(const std::string& nWindowId, const 
OString& rWidget, StringM
 }
 }
 
-auto pTextView = dynamic_cast(pWidget);
+auto pTextView = dynamic_cast(pWidget);
 if (pTextView)
 {
 if (sAction == "change")
 {
-pTextView->set_text(rData["data"]);
+int rStartPos, rEndPos;
+pTextView->get_selection_bounds(rStartPos, rEndPos);
+pTextView->set_text_without_notify(rData["data"]);
+pTextView->select_region(rStartPos, rEndPos);
 LOKTrigger::trigger_changed(*pTextView);
 return true;
 }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 2d73c26613da..3cfe67c3b56c 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1752,6 +1752,11 @@ void JSTextView::set_text(const OUString& rText)
 sendUpdate();
 }
 
+void JSTextView::set_text_without_notify(const OUString& rText)
+{
+SalInstanceTextView::set_text(rText);
+}
+
 void JSTextView::replace_selection(const OUString& rText)
 {
 SalInstanceTextView::replace_selection(rText);


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2023-03-03 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   12 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   59 +++
 2 files changed, 71 insertions(+)

New commits:
commit 60938693aa41df5319bc4d73e4c65c09beda19e6
Author: Szymon Kłos 
AuthorDate: Wed Mar 1 18:11:44 2023 +0100
Commit: Szymon Kłos 
CommitDate: Fri Mar 3 17:31:07 2023 +

jsdialog: add wrapper for weld:Assistant

Signed-off-by: Szymon Kłos 
Change-Id: I82d045cbcc7fc4682c251ac51b19b3bd33f813f8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148190
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index eca79153ff3a..f45a4a50f10f 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -278,6 +278,7 @@ public:
 virtual ~JSInstanceBuilder() override;
 virtual std::unique_ptr weld_message_dialog(const 
OString& id) override;
 virtual std::unique_ptr weld_dialog(const OString& id) 
override;
+virtual std::unique_ptr weld_assistant(const OString& id) 
override;
 virtual std::unique_ptr weld_container(const OString& id) 
override;
 virtual std::unique_ptr weld_label(const OString& id) 
override;
 virtual std::unique_ptr weld_button(const OString& id) 
override;
@@ -482,6 +483,17 @@ public:
 virtual void response(int response) override;
 };
 
+class JSAssistant final : public JSWidget
+{
+public:
+JSAssistant(JSDialogSender* pSender, vcl::RoadmapWizard* pDialog, 
SalInstanceBuilder* pBuilder,
+bool bTakeOwnership);
+
+virtual void set_current_page(int nPage) override;
+virtual void set_current_page(const OString& rIdent) override;
+virtual void response(int response) override;
+};
+
 class JSContainer final : public JSWidget
 {
 public:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 389bd4528ccb..4da0a4461b2c 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -26,6 +26,7 @@
 #include 
 #include 
 #include 
+#include 
 
 static std::map& GetLOKPopupsMap()
 {
@@ -843,6 +844,34 @@ std::unique_ptr 
JSInstanceBuilder::weld_dialog(const OString& id)
 return pRet;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_assistant(const 
OString& id)
+{
+vcl::RoadmapWizard* pDialog = m_xBuilder->get(id);
+std::unique_ptr pRet(pDialog ? new JSAssistant(this, pDialog, 
this, false)
+  : nullptr);
+if (pDialog)
+{
+m_nWindowId = pDialog->GetLOKWindowId();
+pDialog->SetLOKTunnelingState(false);
+
+InsertWindowToMap(getMapIdFromWindowId());
+
+assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");
+m_aOwnedToplevel.set(pDialog);
+m_xBuilder->drop_ownership(pDialog);
+m_bHasTopLevelDialog = true;
+
+pRet.reset(new JSAssistant(this, pDialog, this, false));
+
+RememberWidget("__DIALOG__", pRet.get());
+
+initializeSender(GetNotifierWindow(), GetContentWindow(), 
GetTypeOfJSON());
+sendFullUpdate();
+}
+
+return pRet;
+}
+
 std::unique_ptr 
JSInstanceBuilder::weld_message_dialog(const OString& id)
 {
 std::unique_ptr pRet;
@@ -1230,6 +1259,36 @@ void JSDialog::response(int response)
 SalInstanceDialog::response(response);
 }
 
+void JSAssistant::response(int response)
+{
+if (response == RET_HELP)
+{
+response_help(m_xWidget.get());
+return;
+}
+
+sendClose();
+SalInstanceAssistant::response(response);
+}
+
+JSAssistant::JSAssistant(JSDialogSender* pSender, vcl::RoadmapWizard* pDialog,
+ SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(pSender, pDialog, 
pBuilder, bTakeOwnership)
+{
+}
+
+void JSAssistant::set_current_page(int nPage)
+{
+SalInstanceAssistant::set_current_page(nPage);
+sendFullUpdate();
+}
+
+void JSAssistant::set_current_page(const OString& rIdent)
+{
+SalInstanceAssistant::set_current_page(rIdent);
+sendFullUpdate();
+}
+
 JSContainer::JSContainer(JSDialogSender* pSender, vcl::Window* pContainer,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : JSWidget(pSender, pContainer, 
pBuilder, bTakeOwnership)


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2023-03-03 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |8 
 vcl/inc/salvtables.hxx   |   30 ++
 vcl/jsdialog/jsdialogbuilder.cxx |   18 ++
 vcl/source/app/salvtables.cxx|   33 -
 4 files changed, 56 insertions(+), 33 deletions(-)

New commits:
commit 8c5c9e943d1b754136cc1a76222fa7f84bbfd710
Author: Szymon Kłos 
AuthorDate: Fri Mar 3 12:12:50 2023 +0100
Commit: Szymon Kłos 
CommitDate: Fri Mar 3 15:47:12 2023 +

Move SalInstanceLinkButton declaration to header file

Change-Id: Icd5b79f31e1839303e81c1914c9e30e078661d9e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148111
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 5192e37a1a2f..c2341c7568b2 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -276,6 +276,7 @@ public:
 virtual std::unique_ptr weld_container(const OString& id) 
override;
 virtual std::unique_ptr weld_label(const OString& id) 
override;
 virtual std::unique_ptr weld_button(const OString& id) 
override;
+virtual std::unique_ptr weld_link_button(const OString& 
id) override;
 virtual std::unique_ptr weld_entry(const OString& id) 
override;
 virtual std::unique_ptr weld_combo_box(const OString& id) 
override;
 virtual std::unique_ptr weld_notebook(const OString& id) 
override;
@@ -498,6 +499,13 @@ public:
  bool bTakeOwnership);
 };
 
+class JSLinkButton final : public JSWidget
+{
+public:
+JSLinkButton(JSDialogSender* pSender, ::FixedHyperlink* pButton, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership);
+};
+
 class JSEntry final : public JSWidget
 {
 public:
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 25382e53a546..a6d5f4319d7c 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1154,6 +1155,35 @@ public:
 virtual weld::Container* weld_message_area() override;
 };
 
+class SalInstanceLinkButton : public SalInstanceWidget, public virtual 
weld::LinkButton
+{
+private:
+VclPtr m_xButton;
+Link m_aOrigClickHdl;
+
+DECL_LINK(ClickHdl, FixedHyperlink&, void);
+
+public:
+SalInstanceLinkButton(FixedHyperlink* pButton, SalInstanceBuilder* 
pBuilder,
+  bool bTakeOwnership)
+: SalInstanceWidget(pButton, pBuilder, bTakeOwnership)
+, m_xButton(pButton)
+{
+m_aOrigClickHdl = m_xButton->GetClickHdl();
+m_xButton->SetClickHdl(LINK(this, SalInstanceLinkButton, ClickHdl));
+}
+
+virtual void set_label(const OUString& rText) override { 
m_xButton->SetText(rText); }
+
+virtual OUString get_label() const override { return m_xButton->GetText(); 
}
+
+virtual void set_uri(const OUString& rUri) override { 
m_xButton->SetURL(rUri); }
+
+virtual OUString get_uri() const override { return m_xButton->GetURL(); }
+
+virtual ~SalInstanceLinkButton() override { 
m_xButton->SetClickHdl(m_aOrigClickHdl); }
+};
+
 class SalInstanceCheckButton : public SalInstanceButton, public virtual 
weld::CheckButton
 {
 private:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index f9fd939b38a8..ff6466d4b565 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -904,6 +904,18 @@ std::unique_ptr 
JSInstanceBuilder::weld_button(const OString& id)
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_link_button(const 
OString& id)
+{
+::FixedHyperlink* pButton = m_xBuilder->get<::FixedHyperlink>(id);
+auto pWeldWidget
+= pButton ? std::make_unique(this, pButton, this, false) 
: nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 std::unique_ptr JSInstanceBuilder::weld_entry(const OString& id)
 {
 Edit* pEntry = m_xBuilder->get(id);
@@ -1239,6 +1251,12 @@ JSButton::JSButton(JSDialogSender* pSender, ::Button* 
pButton, SalInstanceBuilde
 {
 }
 
+JSLinkButton::JSLinkButton(JSDialogSender* pSender, ::FixedHyperlink* pButton,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(pSender, pButton, 
pBuilder, bTakeOwnership)
+{
+}
+
 JSEntry::JSEntry(JSDialogSender* pSender, ::Edit* pEntry, SalInstanceBuilder* 
pBuilder,
  bool bTakeOwnership)
 : JSWidget(pSender, pEntry, pBuilder, 
bTakeOwnership)
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 1717a3bc41ea..eb2697b61b03 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -53,7 +53,6 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
@@ -3087,38 +3086,6 @@ public:
 };
 }
 
-namespace
-{
-class 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2022-08-22 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   11 
 vcl/jsdialog/jsdialogbuilder.cxx |   45 ---
 2 files changed, 48 insertions(+), 8 deletions(-)

New commits:
commit 5053ad030b9ed5eba06157e161ff7fb8b61f6718
Author: Szymon Kłos 
AuthorDate: Thu Aug 11 09:21:30 2022 +0200
Commit: Szymon Kłos 
CommitDate: Mon Aug 22 10:16:17 2022 +0200

jsdialog: send MessageDialog on run not when built

- some message boxes doesn't have correct notifier set initially
- then when runAsync is called it is ok so we can remember widget

Signed-off-by: Szymon Kłos 
Change-Id: I8ecf2d20ef4c2ebda3acf3b80bb390717b6caf6b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138107
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Michael Meeks 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138650
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 8945a499b39f..a837df4998a1 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -219,6 +219,8 @@ class JSInstanceBuilder final : public SalInstanceBuilder, 
public JSDialogSender
 /// When LOKNotifier is set by jsdialogs code we need to release it
 VclPtr m_aWindowToRelease;
 
+friend class JSMessageDialog; // static message boxes have to be 
registered outside
+
 friend VCL_DLLPUBLIC bool jsdialog::ExecuteAction(const std::string& 
nWindowId,
   const OString& rWidget, 
StringMap& rData);
 friend VCL_DLLPUBLIC void jsdialog::SendFullUpdate(const std::string& 
nWindowId,
@@ -566,6 +568,8 @@ class JSMessageDialog final : public 
JSWidget aOwner,
+  const std::function& rEndDialogFn) override;
+
+bool runAsync(std::shared_ptr const& rxSelf,
+  const std::function& rEndDialogFn) override;
 };
 
 class JSCheckButton final : public JSWidget
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 02436f16d360..662caaf6a9f2 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1172,18 +1172,14 @@ weld::MessageDialog* 
JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParen
 aJsonWriter.put("jsontype", "dialog");
 std::unique_ptr 
message(aJsonWriter.extractData());
 pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, 
message.get());
+
+std::string sWindowId = 
std::to_string(xMessageDialog->GetLOKWindowId());
+InsertWindowToMap(sWindowId);
 }
 
 xMessageDialog->SetLOKTunnelingState(false);
-std::string sWindowId = std::to_string(xMessageDialog->GetLOKWindowId());
-InsertWindowToMap(sWindowId);
-
-weld::MessageDialog* pRet = new JSMessageDialog(xMessageDialog, nullptr, 
true);
-
-if (pRet)
-RememberWidget(sWindowId, "__DIALOG__", pRet);
 
-return pRet;
+return new JSMessageDialog(xMessageDialog, nullptr, true);
 }
 
 JSDialog::JSDialog(JSDialogSender* pSender, ::Dialog* pDialog, 
SalInstanceBuilder* pBuilder,
@@ -1419,6 +1415,39 @@ JSMessageDialog::~JSMessageDialog()
 JSInstanceBuilder::RemoveWindowWidget(m_sWindowId);
 }
 
+void JSMessageDialog::RememberMessageDialog()
+{
+static OStringLiteral sWidgetName = "__DIALOG__";
+std::string sWindowId = std::to_string(m_xMessageDialog->GetLOKWindowId());
+if (JSInstanceBuilder::FindWeldWidgetsMap(sWindowId, sWidgetName) != 
nullptr)
+return;
+
+JSInstanceBuilder::InsertWindowToMap(sWindowId);
+JSInstanceBuilder::RememberWidget(sWindowId, sWidgetName, this);
+}
+
+bool JSMessageDialog::runAsync(std::shared_ptr aOwner,
+   const std::function& 
rEndDialogFn)
+{
+bool bRet = SalInstanceMessageDialog::runAsync(aOwner, rEndDialogFn);
+
+RememberMessageDialog();
+sendFullUpdate();
+
+return bRet;
+}
+
+bool JSMessageDialog::runAsync(std::shared_ptr const& rxSelf,
+   const std::function& 
rEndDialogFn)
+{
+bool bRet = SalInstanceMessageDialog::runAsync(rxSelf, rEndDialogFn);
+
+RememberMessageDialog();
+sendFullUpdate();
+
+return bRet;
+}
+
 IMPL_LINK_NOARG(JSMessageDialog, OKHdl, weld::Button&, void) { 
response(RET_OK); }
 
 IMPL_LINK_NOARG(JSMessageDialog, CancelHdl, weld::Button&, void) { 
response(RET_CANCEL); }


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2022-07-04 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |8 
 vcl/jsdialog/enabled.cxx |6 +++---
 2 files changed, 11 insertions(+), 3 deletions(-)

New commits:
commit 044b6d343ecdd31670bbd824a8758ee1071327cf
Author: Szymon Kłos 
AuthorDate: Mon Jun 20 20:10:30 2022 +0200
Commit: Szymon Kłos 
CommitDate: Mon Jul 4 08:27:24 2022 +0200

jsdialog: send grab_focus action

- disable jsdialogs for navigator panel for now because it breaks
  tests but is not used in online yet

Change-Id: Ib91050363add8cda1c386627c312b79e0f62b99e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136603
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 5e7437b2725a..6a7a9632a27c 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -417,6 +417,14 @@ public:
 sendUpdate();
 }
 
+virtual void grab_focus() override
+{
+BaseInstanceClass::grab_focus();
+std::unique_ptr pMap = 
std::make_unique();
+(*pMap)[ACTION_TYPE] = "grab_focus";
+sendAction(std::move(pMap));
+}
+
 virtual void sendClose() override
 {
 if (m_pSender)
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index a37d77602766..380fb2d3e9d2 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -121,19 +121,19 @@ bool isBuilderEnabledForSidebar(std::u16string_view 
rUIFile)
 || rUIFile == u"modules/simpress/ui/masterpagepanelrecent.ui"
 || rUIFile == u"modules/simpress/ui/slidetransitionspanel.ui"
 || rUIFile == u"modules/simpress/ui/tabledesignpanel.ui"
-|| rUIFile == u"modules/simpress/ui/navigatorpanel.ui"
+//|| rUIFile == u"modules/simpress/ui/navigatorpanel.ui"
 || rUIFile == u"modules/simpress/ui/sidebarslidebackground.ui"
 || rUIFile == u"modules/scalc/ui/sidebaralignment.ui"
 || rUIFile == u"modules/scalc/ui/sidebarcellappearance.ui"
 || rUIFile == u"modules/scalc/ui/sidebarnumberformat.ui"
-|| rUIFile == u"modules/scalc/ui/navigatorpanel.ui"
+//|| rUIFile == u"modules/scalc/ui/navigatorpanel.ui"
 || rUIFile == u"modules/scalc/ui/functionpanel.ui"
 || rUIFile == u"modules/swriter/ui/pagestylespanel.ui"
 || rUIFile == u"modules/swriter/ui/pageformatpanel.ui"
 || rUIFile == u"modules/swriter/ui/pageheaderpanel.ui"
 || rUIFile == u"modules/swriter/ui/pagefooterpanel.ui"
 || rUIFile == u"modules/swriter/ui/sidebarwrap.ui"
-|| rUIFile == u"modules/swriter/ui/navigatorpanel.ui"
+//|| rUIFile == u"modules/swriter/ui/navigatorpanel.ui"
 || rUIFile == u"modules/swriter/ui/managechangessidebar.ui"
 || rUIFile == u"svx/ui/inspectortextpanel.ui"
 || rUIFile == u"modules/swriter/ui/sidebarstylepresets.ui"


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2022-02-01 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 
 vcl/jsdialog/enabled.cxx |6 --
 vcl/jsdialog/jsdialogbuilder.cxx |   16 +++-
 3 files changed, 23 insertions(+), 3 deletions(-)

New commits:
commit 2a5f0acacad765f2e25f2b9974b979b2b3a9d0cb
Author: Szymon Kłos 
AuthorDate: Mon Nov 22 10:50:03 2021 +0100
Commit: Szymon Kłos 
CommitDate: Tue Feb 1 10:27:08 2022 +0100

jsdialog: send popup when launched using Popover widget

- enable validity listbox in online
- flush when sending close popup to be sure it is sent

Signed-off-by: Szymon Kłos 
Change-Id: Icf33e26c48b78ab60030a7395e8c7ee5462fbf7c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125647
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Jan Holesovsky 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129168

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 5495aeb306fb..6c773312c3d0 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -683,6 +683,10 @@ class JSPopover : public JSWidget
 public:
 JSPopover(JSDialogSender* pSender, DockingWindow* pPopover, 
SalInstanceBuilder* pBuilder,
   bool bTakeOwnership);
+
+virtual void popup_at_rect(weld::Widget* pParent, const tools::Rectangle& 
rRect,
+   weld::Placement ePlace = 
weld::Placement::Under) override;
+virtual void popdown() override;
 };
 
 class JSBox : public JSWidget
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index e51b44493527..d39833c71d84 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -49,7 +49,8 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool 
bMobile)
 || rUIFile == u"modules/scalc/ui/pivotfielddialog.ui"
 || rUIFile == u"modules/scalc/ui/datafieldoptionsdialog.ui"
 || rUIFile == u"svx/ui/fontworkgallerydialog.ui"
-|| rUIFile == u"cui/ui/macroselectordialog.ui" || rUIFile == 
u"uui/ui/macrowarnmedium.ui"
+|| rUIFile == u"svx/ui/findreplacedialog.ui" || rUIFile == 
u"cui/ui/macroselectordialog.ui"
+|| rUIFile == u"uui/ui/macrowarnmedium.ui"
 || rUIFile == u"modules/scalc/ui/textimportcsv.ui"
 || rUIFile == u"xmlsec/ui/digitalsignaturesdialog.ui"
 || rUIFile == u"xmlsec/ui/viewcertdialog.ui" || rUIFile == 
u"xmlsec/ui/certgeneral.ui"
@@ -73,7 +74,8 @@ bool isBuilderEnabledForPopup(std::u16string_view rUIFile)
 || rUIFile == u"svx/ui/floatinglineend.ui"
 || rUIFile == u"svx/ui/fontworkalignmentcontrol.ui"
 || rUIFile == u"svx/ui/fontworkcharacterspacingcontrol.ui"
-|| rUIFile == u"svx/ui/floatingareastyle.ui")
+|| rUIFile == u"svx/ui/floatingareastyle.ui"
+|| rUIFile == u"modules/scalc/ui/filterlist.ui")
 return true;
 
 return false;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index c7d4c1e69dea..8c15f50ba78d 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -373,7 +373,7 @@ void JSDialogSender::sendClosePopup(vcl::LOKWindowId 
nWindowId)
 std::unique_ptr pData = std::make_unique();
 (*pData)[WINDOW_ID] = OUString::number(nWindowId);
 mpIdleNotify->sendMessage(jsdialog::MessageType::PopupClose, nullptr, 
std::move(pData));
-mpIdleNotify->Start();
+flush();
 }
 
 namespace
@@ -1704,6 +1704,20 @@ JSPopover::JSPopover(JSDialogSender* pSender, 
DockingWindow* pDockingWindow,
 {
 }
 
+void JSPopover::popup_at_rect(weld::Widget* pParent, const tools::Rectangle& 
rRect,
+  weld::Placement ePlace)
+{
+SalInstancePopover::popup_at_rect(pParent, rRect, ePlace);
+sendPopup(getWidget()->GetChild(0), "_POPOVER_", "_POPOVER_");
+}
+
+void JSPopover::popdown()
+{
+if (getWidget() && getWidget()->GetChild(0))
+sendClosePopup(getWidget()->GetChild(0)->GetLOKWindowId());
+SalInstancePopover::popdown();
+}
+
 JSBox::JSBox(JSDialogSender* pSender, VclBox* pBox, SalInstanceBuilder* 
pBuilder,
  bool bTakeOwnership)
 : JSWidget(pSender, pBox, pBuilder, bTakeOwnership)


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-12-30 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/executor.cxx|7 ++-
 vcl/jsdialog/jsdialogbuilder.cxx |5 +
 3 files changed, 12 insertions(+), 1 deletion(-)

New commits:
commit 035422a44acb5fc19042199013eb01af3790632e
Author: Szymon Kłos 
AuthorDate: Wed Dec 8 17:22:37 2021 +0100
Commit: Szymon Kłos 
CommitDate: Thu Dec 30 10:38:36 2021 +0100

jsdialog: don't send back typed text for combobox

Do the same what we do for Edit fields for ComboBox entry:
when content is changed by event coming from the client
because user typed something - then don't send back updated
text so it will not disturb typing. It was visible with
slow debug builds.

Change-Id: Ib73096c4b96ebfdfd038ed56234c31ff32a5cda3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126549
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127732
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 801dd4860e85..45620803990f 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -490,6 +490,7 @@ public:
 virtual void insert(int pos, const OUString& rStr, const OUString* pId,
 const OUString* pIconName, VirtualDevice* 
pImageSurface) override;
 virtual void remove(int pos) override;
+virtual void set_entry_text_without_notify(const OUString& rText);
 virtual void set_entry_text(const OUString& rText) override;
 virtual void set_active(int pos) override;
 virtual bool changed_by_direct_pick() const override;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 613cf7f5d26d..742e56800eca 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -102,7 +102,12 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 }
 else if (sAction == "change")
 {
-pCombobox->set_entry_text(rData["data"]);
+// it might be other class than JSComboBox
+auto pJSCombobox = dynamic_cast(pWidget);
+if (pJSCombobox)
+
pJSCombobox->set_entry_text_without_notify(rData["data"]);
+else
+pCombobox->set_entry_text(rData["data"]);
 LOKTrigger::trigger_changed(*pCombobox);
 return true;
 }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8036f3d004e5..17a6c3387c55 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1207,6 +1207,11 @@ void JSComboBox::remove(int pos)
 sendUpdate();
 }
 
+void JSComboBox::set_entry_text_without_notify(const OUString& rText)
+{
+SalInstanceComboBoxWithEdit::set_entry_text(rText);
+}
+
 void JSComboBox::set_entry_text(const OUString& rText)
 {
 SalInstanceComboBoxWithEdit::set_entry_text(rText);


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-12-29 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |8 
 vcl/jsdialog/jsdialogbuilder.cxx |   18 ++
 2 files changed, 26 insertions(+)

New commits:
commit d34047e02e947bcdba555065804a2f772cdd75f2
Author: Szymon Kłos 
AuthorDate: Wed Oct 20 10:59:12 2021 +0200
Commit: Szymon Kłos 
CommitDate: Wed Dec 29 12:01:26 2021 +0100

jsdialog: weld Image widget

Change-Id: Iaf900da5d6256b1aa441dc0dad07ba967f88b085
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123877
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127671
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index f402aeab4cb8..801dd4860e85 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -276,6 +276,7 @@ public:
 virtual std::unique_ptr weld_popover(const OString& id) 
override;
 virtual std::unique_ptr weld_box(const OString& id) override;
 virtual std::unique_ptr weld_widget(const OString& id) 
override;
+virtual std::unique_ptr weld_image(const OString& id) 
override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -696,4 +697,11 @@ public:
 }
 };
 
+class JSImage : public JSWidget
+{
+public:
+JSImage(JSDialogSender* pSender, FixedImage* pImage, SalInstanceBuilder* 
pBuilder,
+bool bTakeOwnership);
+};
+
 /* 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 a9ed9b34678c..9792ce9dd1aa 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1055,6 +1055,18 @@ std::unique_ptr 
JSInstanceBuilder::weld_widget(const OString& id)
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_image(const OString& id)
+{
+FixedImage* pImage = m_xBuilder->get(id);
+
+auto pWeldWidget = pImage ? std::make_unique(this, pImage, this, 
false) : nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
 VclMessageType 
eMessageType,
 VclButtonsType 
eButtonType,
@@ -1680,4 +1692,10 @@ JSBox::JSBox(JSDialogSender* pSender, VclBox* pBox, 
SalInstanceBuilder* pBuilder
 {
 }
 
+JSImage::JSImage(JSDialogSender* pSender, FixedImage* pImage, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership)
+: JSWidget(pSender, pImage, pBuilder, 
bTakeOwnership)
+{
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-12-24 Thread Noel Grandin (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |7 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   17 +++--
 2 files changed, 10 insertions(+), 14 deletions(-)

New commits:
commit ac5d7288ce9ec08e3bfda3c4803ce736c1527568
Author: Noel Grandin 
AuthorDate: Thu Dec 23 22:10:42 2021 +0200
Commit: Noel Grandin 
CommitDate: Fri Dec 24 10:39:26 2021 +0100

use comphelper::WeakComponentImplHelper in JSDropTarget

Change-Id: I40f8090e0c24a29bdb310183981187997696f8e3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127398
Tested-by: Jenkins
Reviewed-by: Noel Grandin 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 3d14a1150576..f402aeab4cb8 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -23,7 +23,7 @@
 #include 
 #include 
 #include 
-#include 
+#include 
 
 #include 
 #include 
@@ -165,10 +165,9 @@ protected:
 };
 
 class JSDropTarget final
-: public cppu::WeakComponentImplHelper
+: public comphelper::WeakComponentImplHelper<
+  css::datatransfer::dnd::XDropTarget, css::lang::XInitialization, 
css::lang::XServiceInfo>
 {
-osl::Mutex m_aMutex;
 
std::vector> 
m_aListeners;
 
 public:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index e4718f7302ac..a9ed9b34678c 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -406,17 +406,14 @@ public:
 
 static JSTreeView* g_DragSource;
 
-JSDropTarget::JSDropTarget()
-: WeakComponentImplHelper(m_aMutex)
-{
-}
+JSDropTarget::JSDropTarget() {}
 
 void JSDropTarget::initialize(const css::uno::Sequence& 
/*rArgs*/) {}
 
 void JSDropTarget::addDropTargetListener(
 const css::uno::Reference& 
xListener)
 {
-::osl::Guard<::osl::Mutex> aGuard(m_aMutex);
+std::unique_lock aGuard(m_aMutex);
 
 m_aListeners.push_back(xListener);
 }
@@ -424,7 +421,7 @@ void JSDropTarget::addDropTargetListener(
 void JSDropTarget::removeDropTargetListener(
 const css::uno::Reference& 
xListener)
 {
-::osl::Guard<::osl::Mutex> aGuard(m_aMutex);
+std::unique_lock aGuard(m_aMutex);
 
 m_aListeners.erase(std::remove(m_aListeners.begin(), m_aListeners.end(), 
xListener),
m_aListeners.end());
@@ -456,10 +453,10 @@ css::uno::Sequence 
JSDropTarget::getSupportedServiceNames()
 
 void JSDropTarget::fire_drop(const 
css::datatransfer::dnd::DropTargetDropEvent& dtde)
 {
-osl::ClearableGuard aGuard(m_aMutex);
+std::unique_lock aGuard(m_aMutex);
 
std::vector> 
aListeners(
 m_aListeners);
-aGuard.clear();
+aGuard.unlock();
 
 for (auto const& listener : aListeners)
 {
@@ -469,10 +466,10 @@ void JSDropTarget::fire_drop(const 
css::datatransfer::dnd::DropTargetDropEvent&
 
 void JSDropTarget::fire_dragEnter(const 
css::datatransfer::dnd::DropTargetDragEnterEvent& dtde)
 {
-osl::ClearableGuard<::osl::Mutex> aGuard(m_aMutex);
+std::unique_lock aGuard(m_aMutex);
 
std::vector> 
aListeners(
 m_aListeners);
-aGuard.clear();
+aGuard.unlock();
 
 for (auto const& listener : aListeners)
 {


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-08-17 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |3 ++-
 vcl/jsdialog/jsdialogbuilder.cxx |   18 +++---
 2 files changed, 9 insertions(+), 12 deletions(-)

New commits:
commit 615a340fcf05845397ea3c9917e2eadf074b4514
Author: Szymon Kłos 
AuthorDate: Mon Jul 5 12:21:16 2021 +0200
Commit: Szymon Kłos 
CommitDate: Tue Aug 17 09:13:21 2021 +0200

jsdialog: simplify popup code

Change-Id: I3a84b1f7c8521b861e99384872127bb4d224c18b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118409
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120542
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 150a89f1f93d..cfc5e52e5bb9 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -52,7 +52,8 @@ enum MessageType
 WidgetUpdate,
 Close,
 Action,
-Popup
+Popup,
+PopupClose
 };
 }
 
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index c3f4e2ac6310..4f0e6aa6bfc5 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -289,17 +289,13 @@ void JSDialogNotifyIdle::Invoke()
 break;
 
 case jsdialog::MessageType::Popup:
-{
-OUString sParentId = (*rMessage.m_pData)[PARENT_ID];
-OUString sWindowId = (*rMessage.m_pData)[WINDOW_ID];
-OUString sCloseId = (*rMessage.m_pData)[CLOSE_ID];
-
-if (!sParentId.isEmpty())
-send(*generatePopupMessage(rMessage.m_pWindow, sParentId, 
sCloseId));
-else if (!sWindowId.isEmpty())
-send(*generateClosePopupMessage(sWindowId));
+send(*generatePopupMessage(rMessage.m_pWindow, 
(*rMessage.m_pData)[PARENT_ID],
+   (*rMessage.m_pData)[CLOSE_ID]));
+break;
+
+case jsdialog::MessageType::PopupClose:
+
send(*generateClosePopupMessage((*rMessage.m_pData)[WINDOW_ID]));
 break;
-}
 }
 }
 }
@@ -376,7 +372,7 @@ void JSDialogSender::sendClosePopup(vcl::LOKWindowId 
nWindowId)
 
 std::unique_ptr pData = std::make_unique();
 (*pData)[WINDOW_ID] = OUString::number(nWindowId);
-mpIdleNotify->sendMessage(jsdialog::MessageType::Popup, nullptr, 
std::move(pData));
+mpIdleNotify->sendMessage(jsdialog::MessageType::PopupClose, nullptr, 
std::move(pData));
 mpIdleNotify->Start();
 }
 


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-08-02 Thread Noel Grandin (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |3 ++-
 vcl/jsdialog/jsdialogbuilder.cxx |   18 ++
 2 files changed, 8 insertions(+), 13 deletions(-)

New commits:
commit dabf9afa5ac1d53c4b785ae6e10535f762ce599d
Author: Noel Grandin 
AuthorDate: Mon Aug 2 09:17:32 2021 +0200
Commit: Noel Grandin 
CommitDate: Mon Aug 2 13:27:16 2021 +0200

osl::Mutex->std::mutex in JSDialogNotifyIdle

Change-Id: I1c172273e14d3bd2cd973abb38bf19be144ef210
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119849
Tested-by: Jenkins
Reviewed-by: Noel Grandin 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index ee17dac321b2..150a89f1f93d 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -27,6 +27,7 @@
 
 #include 
 #include 
+#include 
 #include 
 
 #define ACTION_TYPE "action_type"
@@ -107,7 +108,7 @@ class JSDialogNotifyIdle final : public Idle
 bool m_bForce;
 
 std::deque m_aMessageQueue;
-osl::Mutex m_aQueueMutex;
+std::mutex m_aQueueMutex;
 
 public:
 JSDialogNotifyIdle(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index db1e08173996..d631527af6e0 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -101,7 +101,7 @@ OUString extractActionType(const ActionDataMap& rData)
 void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType eType, 
VclPtr pWindow,
  std::unique_ptr pData)
 {
-m_aQueueMutex.acquire();
+std::lock_guard aGuard(m_aQueueMutex);
 
 // we want only the latest update of same type
 // TODO: also if we met full update - previous updates are not valid
@@ -125,8 +125,6 @@ void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType 
eType, VclPtr JSDialogNotifyIdle::generateFullUpdate() 
const
@@ -261,16 +259,12 @@ JSDialogNotifyIdle::generateClosePopupMessage(OUString 
sWindowId) const
 
 void JSDialogNotifyIdle::Invoke()
 {
-bool bAcquired = m_aQueueMutex.acquire();
-
-if (!bAcquired)
-SAL_WARN("vcl", "JSDialogNotifyIdle::Invoke : mutex cannot be 
acquired");
-
-std::deque aMessageQueue(std::move(m_aMessageQueue));
-m_aMessageQueue = std::deque();
-clearQueue();
+std::deque aMessageQueue;
+{
+std::lock_guard aGuard(m_aQueueMutex);
 
-m_aQueueMutex.release();
+std::swap(aMessageQueue, m_aMessageQueue);
+}
 
 for (auto& rMessage : aMessageQueue)
 {


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2021-07-29 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/enabled.cxx |9 -
 vcl/jsdialog/executor.cxx|6 ++
 vcl/jsdialog/jsdialogbuilder.cxx |   28 +++-
 vcl/source/window/window.cxx |3 +++
 5 files changed, 45 insertions(+), 2 deletions(-)

New commits:
commit 77c39371e3c2965982006f3d060148d05839e95b
Author: Szymon Kłos 
AuthorDate: Fri Jun 25 10:22:15 2021 +0200
Commit: Szymon Kłos 
CommitDate: Thu Jul 29 11:04:54 2021 +0200

jsdialog: handle toolbox menus toggling

Change-Id: I85881531f041cbd5402ac8de2a96b2c7150cbba8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117839
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119609
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 92acff3fc594..ee17dac321b2 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -565,6 +565,7 @@ public:
   bool bTakeOwnership);
 
 virtual void set_menu_item_active(const OString& rIdent, bool bActive) 
override;
+virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) 
override;
 };
 
 class JSTextView final : public JSWidget
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index 67a7cb90c1f0..90ffcdc8dd5d 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -61,7 +61,14 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool 
bMobile)
 
 bool isBuilderEnabledForPopup(std::u16string_view rUIFile)
 {
-if (rUIFile == u"svx/ui/colorwindow.ui" || rUIFile == 
u"modules/scalc/ui/floatinglinestyle.ui")
+if (rUIFile == u"svx/ui/colorwindow.ui" || rUIFile == 
u"modules/scalc/ui/floatinglinestyle.ui"
+|| rUIFile == u"svx/ui/textcharacterspacingcontrol.ui"
+|| rUIFile == u"svx/ui/currencywindow.ui"
+|| rUIFile == u"modules/scalc/ui/floatingborderstyle.ui"
+|| rUIFile == u"svx/ui/textunderlinecontrol.ui" || rUIFile == 
u"svx/ui/numberingwindow.ui"
+|| rUIFile == u"svx/ui/paralinespacingcontrol.ui"
+|| rUIFile == u"svx/ui/floatinglineproperty.ui"
+|| rUIFile == u"svx/ui/floatinglinestyle.ui")
 return true;
 
 return false;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index c1882d5a2d5b..613cf7f5d26d 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -231,6 +231,12 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 *pToolbar, OUStringToOString(rData["data"], 
RTL_TEXTENCODING_ASCII_US));
 return true;
 }
+else if (sAction == "togglemenu")
+{
+pToolbar->set_menu_item_active(
+OUStringToOString(rData["data"], 
RTL_TEXTENCODING_ASCII_US), true);
+return true;
+}
 }
 }
 else if (sControlType == "edit")
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 9526b9e020fa..879ae9bf9d72 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -306,11 +306,16 @@ void JSDialogNotifyIdle::clearQueue() { 
m_aMessageQueue.clear(); }
 JSDialogSender::~JSDialogSender() COVERITY_NOEXCEPT_FALSE
 {
 sendClose();
-mpIdleNotify->Stop();
+
+if (mpIdleNotify)
+mpIdleNotify->Stop();
 }
 
 void JSDialogSender::sendFullUpdate(bool bForce)
 {
+if (!mpIdleNotify)
+return;
+
 if (bForce)
 mpIdleNotify->forceUpdate();
 
@@ -320,6 +325,9 @@ void JSDialogSender::sendFullUpdate(bool bForce)
 
 void JSDialogSender::sendClose()
 {
+if (!mpIdleNotify)
+return;
+
 mpIdleNotify->clearQueue();
 mpIdleNotify->sendMessage(jsdialog::MessageType::Close, nullptr);
 flush();
@@ -327,6 +335,9 @@ void JSDialogSender::sendClose()
 
 void JSDialogSender::sendUpdate(VclPtr pWindow, bool bForce)
 {
+if (!mpIdleNotify)
+return;
+
 if (bForce)
 mpIdleNotify->forceUpdate();
 
@@ -336,12 +347,18 @@ void JSDialogSender::sendUpdate(VclPtr 
pWindow, bool bForce)
 
 void JSDialogSender::sendAction(VclPtr pWindow, 
std::unique_ptr pData)
 {
+if (!mpIdleNotify)
+return;
+
 mpIdleNotify->sendMessage(jsdialog::MessageType::Action, pWindow, 
std::move(pData));
 mpIdleNotify->Start();
 }
 
 void JSDialogSender::sendPopup(VclPtr pWindow, OUString 
sParentId, OUString sCloseId)
 {
+if (!mpIdleNotify)
+return;
+
 std::unique_ptr pData = std::make_unique();
 (*pData)[PARENT_ID] = sParentId;
 (*pData)[CLOSE_ID] = sCloseId;
@@ -351,6 +368,9 @@ void JSDialogSender::sendPopup(VclPtr pWindow, 
OUString sParentId,
 
 void JSDialogSender::sendClosePopup(vcl::LOKWindowId nWindowId)
 {
+if 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2021-07-28 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 
 vcl/jsdialog/jsdialogbuilder.cxx |   20 
 vcl/source/control/button.cxx|   14 ++
 3 files changed, 38 insertions(+)

New commits:
commit 1ec5a1300632a5455416b6cbb090d8c48353d939
Author: Szymon Kłos 
AuthorDate: Mon Jun 14 10:07:02 2021 +0200
Commit: Szymon Kłos 
CommitDate: Wed Jul 28 09:15:31 2021 +0200

jsdialog: dump internal image for buttons

Change-Id: I53687f67042490c19d1056c74619d43566bf1289
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117132
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119562
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 75bdf667cc58..78534ea8c29a 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -623,6 +623,10 @@ class JSMenuButton : public 
JSWidget
 public:
 JSMenuButton(JSDialogSender* pSender, ::MenuButton* pMenuButton, 
SalInstanceBuilder* pBuilder,
  bool bTakeOwnership);
+
+virtual void set_label(const OUString& rText) override;
+virtual void set_image(VirtualDevice* pDevice) override;
+virtual void set_image(const css::uno::Reference& 
rImage) override;
 };
 
 /* 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 335b9cfc23d7..02e794808c78 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1425,4 +1425,24 @@ JSMenuButton::JSMenuButton(JSDialogSender* pSender, 
::MenuButton* pMenuButton,
 {
 }
 
+void JSMenuButton::set_label(const OUString& rText)
+{
+OUString aPreviousLabel = get_label();
+SalInstanceMenuButton::set_label(rText);
+if (aPreviousLabel != rText)
+sendUpdate();
+}
+
+void JSMenuButton::set_image(VirtualDevice* pDevice)
+{
+SalInstanceMenuButton::set_image(pDevice);
+sendUpdate();
+}
+
+void JSMenuButton::set_image(const 
css::uno::Reference& rImage)
+{
+SalInstanceMenuButton::set_image(rImage);
+sendUpdate();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 897d55618151..ac867a292533 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -20,6 +20,7 @@
 #include 
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -42,11 +43,13 @@
 #include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 
 
 using namespace css;
@@ -580,6 +583,17 @@ void Button::DumpAsPropertyTree(tools::JsonWriter& 
rJsonWriter)
 {
 Control::DumpAsPropertyTree(rJsonWriter);
 rJsonWriter.put("text", GetText());
+if (HasImage())
+{
+SvMemoryStream aOStm(6535, 6535);
+if(GraphicConverter::Export(aOStm, GetModeImage().GetBitmapEx(), 
ConvertDataFormat::PNG) == ERRCODE_NONE)
+{
+css::uno::Sequence aSeq( static_cast(aOStm.GetData()), aOStm.Tell());
+OUStringBuffer aBuffer("data:image/png;base64,");
+::comphelper::Base64::encode(aBuffer, aSeq);
+rJsonWriter.put("image", aBuffer.makeStringAndClear());
+}
+}
 }
 
 IMPL_STATIC_LINK( Button, dispatchCommandHandler, Button*, pButton, void )
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-07-27 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |8 
 vcl/jsdialog/jsdialogbuilder.cxx |   17 +
 2 files changed, 25 insertions(+)

New commits:
commit e9aaab806d54d021801e86dc699642c0dc3fb1b0
Author: Szymon Kłos 
AuthorDate: Wed Jun 9 12:06:02 2021 +0200
Commit: Szymon Kłos 
CommitDate: Tue Jul 27 09:43:56 2021 +0200

jsdialog: weld frame

Change-Id: I863022b0b1efc741626b0ba4a8a6183c169eaa85
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116891
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119523
Tested-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 254db3d1eeae..5199dd943439 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -253,6 +253,7 @@ public:
 virtual std::unique_ptr weld_expander(const OString& id) 
override;
 virtual std::unique_ptr weld_icon_view(const OString& id) 
override;
 virtual std::unique_ptr weld_radio_button(const 
OString& id) override;
+virtual std::unique_ptr weld_frame(const OString& id) 
override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -609,4 +610,11 @@ public:
 virtual void set_active(bool active) override;
 };
 
+class JSFrame : public JSWidget
+{
+public:
+JSFrame(JSDialogSender* pSender, ::VclFrame* pFrame, SalInstanceBuilder* 
pBuilder,
+bool bTakeOwnership);
+};
+
 /* 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 c8aa2d1d6d6c..af68f2c48319 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -862,6 +862,17 @@ std::unique_ptr 
JSInstanceBuilder::weld_radio_button(const OS
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_frame(const OString& id)
+{
+::VclFrame* pFrame = m_xBuilder->get<::VclFrame>(id);
+auto pWeldWidget = pFrame ? std::make_unique(this, pFrame, this, 
false) : nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
 VclMessageType 
eMessageType,
 VclButtonsType 
eButtonType,
@@ -1390,4 +1401,10 @@ void JSRadioButton::set_active(bool active)
 sendUpdate();
 }
 
+JSFrame::JSFrame(JSDialogSender* pSender, ::VclFrame* pFrame, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership)
+: JSWidget(pSender, pFrame, pBuilder, 
bTakeOwnership)
+{
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/Library_vcl.mk vcl/source

2021-07-17 Thread Szymon Kłos (via logerrit)
 vcl/Library_vcl.mk|1 
 vcl/inc/jsdialog/enabled.hxx  |   20 +++
 vcl/jsdialog/enabled.cxx  |   72 ++
 vcl/source/window/builder.cxx |   53 ++
 4 files changed, 97 insertions(+), 49 deletions(-)

New commits:
commit 6b1434529231f422deab2129639b16f3cd17f129
Author: Szymon Kłos 
AuthorDate: Wed May 12 08:53:16 2021 +0200
Commit: Szymon Kłos 
CommitDate: Sat Jul 17 16:35:53 2021 +0200

jsdialog: move list of enabled dialogs to separate file

Change-Id: I98c92b336fbf76f3dc94265a408c9b3b46fcea08
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115453
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Andras Timar 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119014
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 17458a0ed679..8a150e0ad1ca 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -501,6 +501,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
 vcl/backendtest/outputdevice/polyline_b2d \
 vcl/backendtest/outputdevice/rectangle \
 vcl/backendtest/GraphicsRenderTests \
+vcl/jsdialog/enabled \
 vcl/jsdialog/jsdialogbuilder \
 vcl/jsdialog/executor \
 ))
diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx
new file mode 100644
index ..86bba683b7e2
--- /dev/null
+++ b/vcl/inc/jsdialog/enabled.hxx
@@ -0,0 +1,20 @@
+/* -*- 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/.
+ */
+
+#pragma once
+
+#include 
+
+namespace jsdialog
+{
+bool isBuilderEnabled(std::u16string_view rUIFile, bool bMobile);
+bool isInterimBuilderEnabledForNotebookbar(std::u16string_view rUIFile);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
new file mode 100644
index ..928b205d4020
--- /dev/null
+++ b/vcl/jsdialog/enabled.cxx
@@ -0,0 +1,72 @@
+/* -*- 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 
+
+namespace jsdialog
+{
+bool isBuilderEnabled(std::u16string_view rUIFile, bool bMobile)
+{
+if (bMobile)
+{
+if (rUIFile == u"modules/swriter/ui/wordcount-mobile.ui"
+|| rUIFile == u"svx/ui/findreplacedialog-mobile.ui"
+|| rUIFile == u"modules/swriter/ui/watermarkdialog.ui"
+|| rUIFile == u"modules/scalc/ui/validationdialog.ui"
+|| rUIFile == u"modules/scalc/ui/validationcriteriapage.ui"
+|| rUIFile == u"modules/scalc/ui/validationhelptabpage-mobile.ui"
+|| rUIFile == u"modules/scalc/ui/erroralerttabpage-mobile.ui"
+|| rUIFile == u"modules/scalc/ui/validationdialog.ui")
+{
+return true;
+}
+}
+
+if (rUIFile == u"modules/scalc/ui/pivottablelayoutdialog.ui"
+|| rUIFile == u"modules/scalc/ui/selectsource.ui"
+|| rUIFile == u"modules/scalc/ui/managenamesdialog.ui"
+|| rUIFile == u"modules/scalc/ui/definename.ui"
+|| rUIFile == u"modules/scalc/ui/correlationdialog.ui"
+|| rUIFile == u"modules/scalc/ui/samplingdialog.ui"
+|| rUIFile == u"modules/scalc/ui/descriptivestatisticsdialog.ui"
+|| rUIFile == u"modules/scalc/ui/analysisofvariancedialog.ui"
+|| rUIFile == u"modules/scalc/ui/covariancedialog.ui"
+|| rUIFile == u"modules/scalc/ui/exponentialsmoothingdialog.ui"
+|| rUIFile == u"modules/scalc/ui/movingaveragedialog.ui"
+|| rUIFile == u"modules/scalc/ui/regressiondialog.ui"
+|| rUIFile == u"modules/scalc/ui/ttestdialog.ui"
+|| rUIFile == u"modules/scalc/ui/ttestdialog.ui"
+|| rUIFile == u"modules/scalc/ui/ztestdialog.ui"
+|| rUIFile == u"modules/scalc/ui/chisquaretestdialog.ui"
+|| rUIFile == u"modules/scalc/ui/fourieranalysisdialog.ui"
+|| rUIFile == u"modules/scalc/ui/datafielddialog.ui"
+|| rUIFile == u"modules/scalc/ui/pivotfielddialog.ui"
+|| rUIFile == u"modules/scalc/ui/datafieldoptionsdialog.ui"
+|| rUIFile == u"svx/ui/fontworkgallerydialog.ui"
+|| rUIFile == u"cui/ui/macroselectordialog.ui" || rUIFile == 
u"uui/ui/macrowarnmedium.ui"
+|| rUIFile == u"modules/scalc/ui/textimportc.ui")
+{
+return true;
+ 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-07-03 Thread Caolán McNamara (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |2 +-
 vcl/jsdialog/jsdialogbuilder.cxx |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 0f9b36439e33f34ac10e3ec43722e9d5c2c702e0
Author: Caolán McNamara 
AuthorDate: Sat Jul 3 14:22:05 2021 +0100
Commit: Caolán McNamara 
CommitDate: Sat Jul 3 22:15:00 2021 +0200

cid#1486702 Uncaught exception

Change-Id: I672c406368f0fd8762349c993cd3febbe5720b2d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118351
Tested-by: Jenkins
Reviewed-by: Caolán McNamara 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 78d569d54226..a677fc31696f 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -133,7 +133,7 @@ public:
 initializeSender(aNotifierWindow, aContentWindow, sTypeOfJSON);
 }
 
-virtual ~JSDialogSender();
+virtual ~JSDialogSender() COVERITY_NOEXCEPT_FALSE;
 
 virtual void sendFullUpdate(bool bForce = false);
 void sendClose();
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index df273f0d57b7..143815341aae 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -240,7 +240,7 @@ void JSDialogNotifyIdle::Invoke()
 
 void JSDialogNotifyIdle::clearQueue() { m_aMessageQueue.clear(); }
 
-JSDialogSender::~JSDialogSender()
+JSDialogSender::~JSDialogSender() COVERITY_NOEXCEPT_FALSE
 {
 sendClose();
 mpIdleNotify->Stop();
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-04-07 Thread Henry Castro (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |9 +
 vcl/jsdialog/jsdialogbuilder.cxx |   53 +++
 2 files changed, 62 insertions(+)

New commits:
commit 54209acb41b25422ce708da3a2aa33d124d3053c
Author: Henry Castro 
AuthorDate: Tue Mar 2 19:09:21 2021 -0400
Commit: Henry Castro 
CommitDate: Wed Apr 7 17:49:19 2021 +0200

jsdialog: JSMessageDialog tweaks when builder is nullptr

"CreateMessageDialog" creates the message dialog without
builder, so some buttons need a click handler to close the
message dialog.

Change-Id: I73ac99020abfb23a1b1313468b6b0f5a8a17f039
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111852
Reviewed-by: Szymon Kłos 
Tested-by: Jenkins CollaboraOffice 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113692
Tested-by: Jenkins
Reviewed-by: Henry Castro 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 2b6672b2da05..5807a20fb1b2 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -250,6 +250,9 @@ public:
 VclButtonsType eButtonType,
 const OUString& 
rPrimaryMessage);
 
+static void AddChildWidget(sal_uInt64 nWindowId, const OString& id, 
weld::Widget* pWidget);
+static void RemoveWindowWidget(sal_uInt64 nWindowId);
+
 private:
 const std::string& GetTypeOfJSON();
 VclPtr& GetContentWindow();
@@ -450,11 +453,17 @@ public:
 class JSMessageDialog : public JSWidget
 {
 std::unique_ptr m_pOwnedSender;
+std::unique_ptr m_pOK;
+std::unique_ptr m_pCancel;
+
+DECL_LINK(OKHdl, weld::Button&, void);
+DECL_LINK(CancelHdl, weld::Button&, void);
 
 public:
 JSMessageDialog(JSDialogSender* pSender, ::MessageDialog* pDialog, 
SalInstanceBuilder* pBuilder,
 bool bTakeOwnership);
 JSMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder, 
bool bTakeOwnership);
+virtual ~JSMessageDialog();
 
 virtual void set_primary_text(const OUString& rText) override;
 
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8414f3f9e262..6cfdea3e8b54 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -537,6 +537,26 @@ void JSInstanceBuilder::RememberWidget(const OString& id, 
weld::Widget* pWidget)
 }
 }
 
+void JSInstanceBuilder::AddChildWidget(sal_uInt64 nWindowId, const OString& id,
+   weld::Widget* pWidget)
+{
+auto it = GetLOKWeldWidgetsMap().find(nWindowId);
+if (it != GetLOKWeldWidgetsMap().end())
+{
+it->second.erase(id);
+it->second.insert(WidgetMap::value_type(id, pWidget));
+}
+}
+
+void JSInstanceBuilder::RemoveWindowWidget(sal_uInt64 nWindowId)
+{
+auto it = JSInstanceBuilder::GetLOKWeldWidgetsMap().find(nWindowId);
+if (it != JSInstanceBuilder::GetLOKWeldWidgetsMap().end())
+{
+JSInstanceBuilder::GetLOKWeldWidgetsMap().erase(it);
+}
+}
+
 const std::string& JSInstanceBuilder::GetTypeOfJSON() { return m_sTypeOfJSON; }
 
 VclPtr& JSInstanceBuilder::GetContentWindow()
@@ -807,6 +827,8 @@ weld::MessageDialog* 
JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParen
 pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, 
message.get());
 }
 
+xMessageDialog->SetLOKTunnelingState(false);
+InsertWindowToMap(xMessageDialog->GetLOKWindowId());
 return new JSMessageDialog(xMessageDialog, nullptr, true);
 }
 
@@ -996,8 +1018,39 @@ JSMessageDialog::JSMessageDialog(::MessageDialog* 
pDialog, SalInstanceBuilder* p
 , m_pOwnedSender(new JSDialogSender(pDialog, pDialog, "dialog"))
 {
 m_pSender = m_pOwnedSender.get();
+
+if (!pBuilder)
+{
+if (::OKButton* pOKBtn
+= 
dynamic_cast<::OKButton*>(m_xMessageDialog->get_widget_for_response(RET_OK)))
+{
+m_pOK.reset(new JSButton(m_pSender, pOKBtn, nullptr, false));
+
JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
+  pOKBtn->get_id().toUtf8(), 
m_pOK.get());
+m_pOK->connect_clicked(LINK(this, JSMessageDialog, OKHdl));
+}
+
+if (::CancelButton* pCancelBtn
+= 
dynamic_cast<::CancelButton*>(m_xMessageDialog->get_widget_for_response(RET_CANCEL)))
+{
+m_pCancel.reset(new JSButton(m_pSender, pCancelBtn, nullptr, 
false));
+
JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
+  pCancelBtn->get_id().toUtf8(), 
m_pCancel.get());
+m_pCancel->connect_clicked(LINK(this, JSMessageDialog, CancelHdl));
+}
+}
+}
+
+JSMessageDialog::~JSMessageDialog()
+{
+if (m_pOK || m_pCancel)
+

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-03-05 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 
 vcl/jsdialog/jsdialogbuilder.cxx |   12 
 2 files changed, 16 insertions(+)

New commits:
commit 34d13d47cc7af0191f6d3a66d3c34acde79b97e4
Author: Szymon Kłos 
AuthorDate: Wed Feb 10 08:04:06 2021 +0100
Commit: Szymon Kłos 
CommitDate: Fri Mar 5 13:14:39 2021 +0100

jsdialog: update on treeview item remove

Change-Id: I36b07284b18d3eda184fd6c3f186763d1265d2a6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110665
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Jan Holesovsky 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111988
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 3a6e338a80c2..d95a5826add0 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -469,6 +469,10 @@ public:
 virtual void expand_row(const weld::TreeIter& rIter) override;
 virtual void collapse_row(const weld::TreeIter& rIter) override;
 
+using SalInstanceTreeView::remove;
+virtual void remove(int pos) override;
+virtual void remove(const weld::TreeIter& rIter) override;
+
 void drag_start();
 void drag_end();
 };
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index c7c8c3735fd5..5f4ad0ec2bd2 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1108,6 +1108,18 @@ void JSTreeView::set_text(const weld::TreeIter& rIter, 
const OUString& rStr, int
 sendUpdate();
 }
 
+void JSTreeView::remove(int pos)
+{
+SalInstanceTreeView::remove(pos);
+sendUpdate();
+}
+
+void JSTreeView::remove(const weld::TreeIter& rIter)
+{
+SalInstanceTreeView::remove(rIter);
+sendUpdate();
+}
+
 void JSTreeView::expand_row(const weld::TreeIter& rIter)
 {
 SalInstanceTreeView::expand_row(rIter);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-03-03 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/jsdialogbuilder.cxx |6 ++
 2 files changed, 7 insertions(+)

New commits:
commit 8a5b110ec48629bbfe58f6e76803f27fe2f69882
Author: Szymon Kłos 
AuthorDate: Mon Jan 25 15:04:17 2021 +0100
Commit: Szymon Kłos 
CommitDate: Wed Mar 3 12:29:44 2021 +0100

jsdialog: missing method for treeview

Change-Id: Ice358bb9d79cc0e257e03fba4ef9df1397284158
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109971
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Tomaž Vajngerl 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111840
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 71ad8aea29c7..462b1cfeb1ef 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -447,6 +447,7 @@ public:
 using SalInstanceTreeView::set_toggle;
 /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
 virtual void set_toggle(int pos, TriState eState, int col = -1) override;
+virtual void set_toggle(const weld::TreeIter& rIter, TriState bOn, int col 
= -1) override;
 
 using SalInstanceTreeView::select;
 /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8c14e93e4a72..da0537893a35 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -995,6 +995,12 @@ void JSTreeView::set_toggle(int pos, TriState eState, int 
col)
 }
 }
 
+void JSTreeView::set_toggle(const weld::TreeIter& rIter, TriState bOn, int col)
+{
+SalInstanceTreeView::set_toggle(rIter, bOn, col);
+sendUpdate();
+}
+
 void JSTreeView::select(int pos)
 {
 assert(m_xTreeView->IsUpdateMode() && "don't select when frozen");
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-22 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |6 ++--
 vcl/jsdialog/jsdialogbuilder.cxx |   45 ++-
 2 files changed, 27 insertions(+), 24 deletions(-)

New commits:
commit a6f45c525226e858ccca5078a6a41e8b07a78b86
Author: Szymon Kłos 
AuthorDate: Fri Jan 15 11:38:50 2021 +0100
Commit: Szymon Kłos 
CommitDate: Fri Jan 22 11:30:42 2021 +0100

jsdialog: partial updates for more widgets

+ DrawingArea
+ Combobox
+ Listbox
+ RadioButton
+ Expander
+ IconView
+ Entry
+ TextView
+ SpinField

Change-Id: Ic1fdc8ae37216089d0ba18191ff12895c1f5e84e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109367
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index aa9de490c249..267dc960ecd9 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -88,7 +88,7 @@ public:
 
 virtual void sendFullUpdate(bool bForce = false);
 void sendClose();
-virtual void sendUpdate(VclPtr pWindow);
+virtual void sendUpdate(VclPtr pWindow, bool bForce = false);
 void flush() { mpIdleNotify->Invoke(); }
 
 protected:
@@ -278,10 +278,10 @@ public:
 m_pSender->sendClose();
 }
 
-void sendUpdate()
+void sendUpdate(bool bForce = false)
 {
 if (!m_bIsFreezed && m_pSender)
-m_pSender->sendUpdate(BaseInstanceClass::m_xWidget);
+m_pSender->sendUpdate(BaseInstanceClass::m_xWidget, bForce);
 }
 
 void sendFullUpdate(bool bForce = false)
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 658ee5ae18d6..9fd33ae26b3a 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -182,8 +182,11 @@ void JSDialogSender::sendClose()
 flush();
 }
 
-void JSDialogSender::sendUpdate(VclPtr pWindow)
+void JSDialogSender::sendUpdate(VclPtr pWindow, bool bForce)
 {
+if (bForce)
+mpIdleNotify->forceUpdate();
+
 mpIdleNotify->sendMessage(jsdialog::MessageType::WidgetUpdate, pWindow);
 mpIdleNotify->Start();
 }
@@ -772,7 +775,7 @@ JSEntry::JSEntry(JSDialogSender* pSender, ::Edit* pEntry, 
SalInstanceBuilder* pB
 void JSEntry::set_text(const OUString& rText)
 {
 SalInstanceEntry::set_text(rText);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSEntry::set_text_without_notify(const OUString& rText) { 
SalInstanceEntry::set_text(rText); }
@@ -788,19 +791,19 @@ void JSListBox::insert(int pos, const OUString& rStr, 
const OUString* pId,
const OUString* pIconName, VirtualDevice* pImageSurface)
 {
 SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSListBox::remove(int pos)
 {
 SalInstanceComboBoxWithoutEdit::remove(pos);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSListBox::set_active(int pos)
 {
 SalInstanceComboBoxWithoutEdit::set_active(pos);
-sendFullUpdate();
+sendUpdate();
 }
 
 JSComboBox::JSComboBox(JSDialogSender* pSender, ::ComboBox* pComboBox, 
SalInstanceBuilder* pBuilder,
@@ -814,25 +817,25 @@ void JSComboBox::insert(int pos, const OUString& rStr, 
const OUString* pId,
 const OUString* pIconName, VirtualDevice* 
pImageSurface)
 {
 SalInstanceComboBoxWithEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSComboBox::remove(int pos)
 {
 SalInstanceComboBoxWithEdit::remove(pos);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSComboBox::set_entry_text(const OUString& rText)
 {
 SalInstanceComboBoxWithEdit::set_entry_text(rText);
-sendFullUpdate();
+sendUpdate();
 }
 
 void JSComboBox::set_active(int pos)
 {
 SalInstanceComboBoxWithEdit::set_active(pos);
-sendFullUpdate();
+sendUpdate();
 }
 
 JSNotebook::JSNotebook(JSDialogSender* pSender, ::TabControl* pControl,
@@ -884,7 +887,7 @@ JSSpinButton::JSSpinButton(JSDialogSender* pSender, 
::FormattedField* pSpin,
 void JSSpinButton::set_value(int value)
 {
 SalInstanceSpinButton::set_value(value);
-sendFullUpdate(true); // if input is limited we can receive the same JSON
+sendUpdate(true); // if input is limited we can receive the same JSON
 }
 
 JSMessageDialog::JSMessageDialog(JSDialogSender* pSender, ::MessageDialog* 
pDialog,
@@ -924,7 +927,7 @@ JSCheckButton::JSCheckButton(JSDialogSender* pSender, 
::CheckBox* pCheckBox,
 void JSCheckButton::set_active(bool active)
 {
 SalInstanceCheckButton::set_active(active);
-sendFullUpdate();
+sendUpdate();
 }
 
 JSDrawingArea::JSDrawingArea(JSDialogSender* pSender, VclDrawingArea* 
pDrawingArea,
@@ -938,13 +941,13 @@ JSDrawingArea::JSDrawingArea(JSDialogSender* pSender, 
VclDrawingArea* pDrawingAr
 void JSDrawingArea::queue_draw()
 {
 SalInstanceDrawingArea::queue_draw();
-

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/jsdialogbuilder.cxx |2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

New commits:
commit 67cdf39b467fc4dffd4b1dafc6d4aff2a09bfe70
Author: Szymon Kłos 
AuthorDate: Tue Jan 19 15:55:29 2021 +0100
Commit: Szymon Kłos 
CommitDate: Thu Jan 21 06:53:06 2021 +0100

jsdialog: flush message queue on dialog close

Change-Id: I9e7d24e43a7ee7bf1a006c8d16e7b47a6b714fd9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109644
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 0c274868c716..137659e9b217 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -89,6 +89,7 @@ public:
 virtual void sendFullUpdate(bool bForce = false);
 void sendClose();
 virtual void sendUpdate(VclPtr pWindow);
+void flush() { mpIdleNotify->Invoke(); }
 
 protected:
 void initializeSender(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 98eb4fbdeb3a..e8c8ff4d4232 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -167,7 +167,7 @@ void JSDialogSender::sendFullUpdate(bool bForce)
 void JSDialogSender::sendClose()
 {
 mpIdleNotify->sendMessage(jsdialog::MessageType::Close, nullptr);
-mpIdleNotify->Start();
+flush();
 }
 
 void JSDialogSender::sendUpdate(VclPtr pWindow)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   16 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   78 +--
 2 files changed, 48 insertions(+), 46 deletions(-)

New commits:
commit f9e05d9472d1d82734f10e8237a597a342ae32f3
Author: Szymon Kłos 
AuthorDate: Tue Jan 19 12:09:45 2021 +0100
Commit: Szymon Kłos 
CommitDate: Thu Jan 21 06:51:50 2021 +0100

jsdialog: send updates also for source treeview on drag

+ simplify updates
+ unify naming

Change-Id: Iebdaae3d910ef2cba0c818aa17d407e39f62a5e4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109635
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index b638ac01a417..bf35c54609cf 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -86,7 +86,7 @@ public:
 
 virtual ~JSDialogSender() = default;
 
-virtual void notifyDialogState(bool bForce = false);
+virtual void sendFullUpdate(bool bForce = false);
 void sendClose();
 virtual void sendUpdate(VclPtr pWindow);
 
@@ -233,20 +233,20 @@ public:
 virtual void show() override
 {
 BaseInstanceClass::show();
-notifyDialogState();
+sendFullUpdate();
 }
 
 virtual void hide() override
 {
 BaseInstanceClass::hide();
-notifyDialogState();
+sendFullUpdate();
 }
 
 using BaseInstanceClass::set_sensitive;
 virtual void set_sensitive(bool sensitive) override
 {
 BaseInstanceClass::set_sensitive(sensitive);
-sendUpdate(BaseInstanceClass::m_xWidget);
+sendUpdate();
 }
 
 virtual css::uno::Reference 
get_drop_target() override
@@ -275,16 +275,16 @@ public:
 m_pSender->sendClose();
 }
 
-void sendUpdate(VclPtr pWindow)
+void sendUpdate()
 {
 if (!m_bIsFreezed && m_pSender)
-m_pSender->sendUpdate(pWindow);
+m_pSender->sendUpdate(BaseInstanceClass::m_xWidget);
 }
 
-void notifyDialogState(bool bForce = false)
+void sendFullUpdate(bool bForce = false)
 {
 if ((!m_bIsFreezed || bForce) && m_pSender)
-m_pSender->notifyDialogState(bForce);
+m_pSender->sendFullUpdate(bForce);
 }
 };
 
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 0c57aaf4fa44..e40e098b74e0 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -155,7 +155,7 @@ void JSDialogNotifyIdle::Invoke()
 m_aMessageQueue.clear();
 }
 
-void JSDialogSender::notifyDialogState(bool bForce)
+void JSDialogSender::sendFullUpdate(bool bForce)
 {
 if (bForce)
 mpIdleNotify->forceUpdate();
@@ -726,13 +726,13 @@ JSDialog::JSDialog(JSDialogSender* pSender, ::Dialog* 
pDialog, SalInstanceBuilde
 void JSDialog::collapse(weld::Widget* pEdit, weld::Widget* pButton)
 {
 SalInstanceDialog::collapse(pEdit, pButton);
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSDialog::undo_collapse()
 {
 SalInstanceDialog::undo_collapse();
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSDialog::response(int response)
@@ -750,7 +750,7 @@ JSLabel::JSLabel(JSDialogSender* pSender, FixedText* 
pLabel, SalInstanceBuilder*
 void JSLabel::set_label(const OUString& rText)
 {
 SalInstanceLabel::set_label(rText);
-sendUpdate(m_xWidget);
+sendUpdate();
 };
 
 JSButton::JSButton(JSDialogSender* pSender, ::Button* pButton, 
SalInstanceBuilder* pBuilder,
@@ -768,7 +768,7 @@ JSEntry::JSEntry(JSDialogSender* pSender, ::Edit* pEntry, 
SalInstanceBuilder* pB
 void JSEntry::set_text(const OUString& rText)
 {
 SalInstanceEntry::set_text(rText);
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSEntry::set_text_without_notify(const OUString& rText) { 
SalInstanceEntry::set_text(rText); }
@@ -784,19 +784,19 @@ void JSListBox::insert(int pos, const OUString& rStr, 
const OUString* pId,
const OUString* pIconName, VirtualDevice* pImageSurface)
 {
 SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSListBox::remove(int pos)
 {
 SalInstanceComboBoxWithoutEdit::remove(pos);
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSListBox::set_active(int pos)
 {
 SalInstanceComboBoxWithoutEdit::set_active(pos);
-notifyDialogState();
+sendFullUpdate();
 }
 
 JSComboBox::JSComboBox(JSDialogSender* pSender, ::ComboBox* pComboBox, 
SalInstanceBuilder* pBuilder,
@@ -810,25 +810,25 @@ void JSComboBox::insert(int pos, const OUString& rStr, 
const OUString* pId,
 const OUString* pIconName, VirtualDevice* 
pImageSurface)
 {
 SalInstanceComboBoxWithEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
-notifyDialogState();
+sendFullUpdate();
 }
 
 void JSComboBox::remove(int pos)

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |3 ++-
 vcl/jsdialog/executor.cxx|4 ++--
 vcl/jsdialog/jsdialogbuilder.cxx |4 +++-
 3 files changed, 7 insertions(+), 4 deletions(-)

New commits:
commit 30afe838d35471c3d3e8f90e997ea0f4c152c6ae
Author: Szymon Kłos 
AuthorDate: Tue Jan 19 08:39:15 2021 +0100
Commit: Szymon Kłos 
CommitDate: Thu Jan 21 06:51:13 2021 +0100

jsdialog: set entry text without back notification

We don't want to disturb user while editing the text

Change-Id: I8a8b9a688133d27fc2aeaee6178a773641f4a79f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109612
Tested-by: Szymon Kłos 
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index cefa5776c79b..b638ac01a417 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -246,7 +246,7 @@ public:
 virtual void set_sensitive(bool sensitive) override
 {
 BaseInstanceClass::set_sensitive(sensitive);
-notifyDialogState();
+sendUpdate(BaseInstanceClass::m_xWidget);
 }
 
 virtual css::uno::Reference 
get_drop_target() override
@@ -320,6 +320,7 @@ public:
 JSEntry(JSDialogSender* pSender, ::Edit* pEntry, SalInstanceBuilder* 
pBuilder,
 bool bTakeOwnership);
 virtual void set_text(const OUString& rText) override;
+void set_text_without_notify(const OUString& rText);
 };
 
 class JSListBox : public JSWidget
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 655104633410..1de6db627f96 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -166,12 +166,12 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 }
 else if (sControlType == "edit")
 {
-auto pEdit = dynamic_cast(pWidget);
+auto pEdit = dynamic_cast(pWidget);
 if (pEdit)
 {
 if (sAction == "change")
 {
-pEdit->set_text(rData["data"]);
+pEdit->set_text_without_notify(rData["data"]);
 LOKTrigger::trigger_changed(*pEdit);
 return true;
 }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 38ef2a44e354..0c57aaf4fa44 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -750,7 +750,7 @@ JSLabel::JSLabel(JSDialogSender* pSender, FixedText* 
pLabel, SalInstanceBuilder*
 void JSLabel::set_label(const OUString& rText)
 {
 SalInstanceLabel::set_label(rText);
-notifyDialogState();
+sendUpdate(m_xWidget);
 };
 
 JSButton::JSButton(JSDialogSender* pSender, ::Button* pButton, 
SalInstanceBuilder* pBuilder,
@@ -771,6 +771,8 @@ void JSEntry::set_text(const OUString& rText)
 notifyDialogState();
 }
 
+void JSEntry::set_text_without_notify(const OUString& rText) { 
SalInstanceEntry::set_text(rText); }
+
 JSListBox::JSListBox(JSDialogSender* pSender, ::ListBox* pListBox, 
SalInstanceBuilder* pBuilder,
  bool bTakeOwnership)
 : JSWidget(pSender, pListBox, 
pBuilder,
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   10 ++
 vcl/jsdialog/executor.cxx|   15 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   25 +
 3 files changed, 50 insertions(+)

New commits:
commit 38d01e5af250fb18aa41db8eeafaa644004a0ed4
Author: Szymon Kłos 
AuthorDate: Tue Jan 19 09:19:03 2021 +0100
Commit: Szymon Kłos 
CommitDate: Wed Jan 20 15:05:47 2021 +0100

jsdialog: implemented RadioButton

Change-Id: Iad182d96cb4ff86b1a3fc8bfcca37ea62763fe67
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109615
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index a1c320c16159..cefa5776c79b 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -190,6 +190,7 @@ public:
 virtual std::unique_ptr weld_tree_view(const OString& id) 
override;
 virtual std::unique_ptr weld_expander(const OString& id) 
override;
 virtual std::unique_ptr weld_icon_view(const OString& id) 
override;
+virtual std::unique_ptr weld_radio_button(const 
OString& id) override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -476,4 +477,13 @@ public:
 virtual void unselect(int pos) override;
 };
 
+class JSRadioButton : public JSWidget
+{
+public:
+JSRadioButton(JSDialogSender* pSender, ::RadioButton* pRadioButton,
+  SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+
+virtual void set_active(bool active) override;
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index f2d4d61ecf61..655104633410 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -316,6 +316,21 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 }
 }
 }
+else if (sControlType == "radiobutton")
+{
+auto pRadioButton = dynamic_cast(pWidget);
+if (pRadioButton)
+{
+if (sAction == "change")
+{
+bool bChecked = rData["data"] == "true";
+pRadioButton->set_state(bChecked ? TRISTATE_TRUE : 
TRISTATE_FALSE);
+
LOKTrigger::trigger_clicked(*static_cast(pRadioButton));
+
LOKTrigger::trigger_toggled(*static_cast(pRadioButton));
+return true;
+}
+}
+}
 }
 
 return false;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 140e3fa2b755..38ef2a44e354 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -681,6 +681,18 @@ std::unique_ptr 
JSInstanceBuilder::weld_icon_view(const OString&
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_radio_button(const 
OString& id)
+{
+::RadioButton* pRadioButton = m_xBuilder->get<::RadioButton>(id);
+auto pWeldWidget
+= pRadioButton ? std::make_unique(this, pRadioButton, 
this, false) : nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
 VclMessageType 
eMessageType,
 VclButtonsType 
eButtonType,
@@ -1108,4 +1120,17 @@ void JSIconView::unselect(int pos)
 notifyDialogState();
 }
 
+JSRadioButton::JSRadioButton(JSDialogSender* pSender, ::RadioButton* 
pRadioButton,
+ SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(pSender, pRadioButton, 
pBuilder,
+  bTakeOwnership)
+{
+}
+
+void JSRadioButton::set_active(bool active)
+{
+SalInstanceRadioButton::set_active(active);
+notifyDialogState();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-14 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   24 ++--
 vcl/jsdialog/jsdialogbuilder.cxx |   96 +--
 2 files changed, 67 insertions(+), 53 deletions(-)

New commits:
commit 8760c3036b2bcfb5021f1f4c57493de73f4859c7
Author: Szymon Kłos 
AuthorDate: Wed Jan 13 13:16:30 2021 +0100
Commit: Szymon Kłos 
CommitDate: Fri Jan 15 08:39:21 2021 +0100

jsdialog: enqueue messages in order

Change-Id: Ib50cf6e2b57c591d1d3cffbe823162d7a17474cf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109262
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index ca59aab24924..a1c320c16159 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -24,6 +24,8 @@
 #include 
 #include 
 
+#include 
+
 class ToolBox;
 class ComboBox;
 class VclMultiLineEdit;
@@ -32,6 +34,16 @@ class IconView;
 
 typedef std::map WidgetMap;
 
+namespace jsdialog
+{
+enum MessageType
+{
+FullUpdate,
+WidgetUpdate,
+Close
+};
+}
+
 class JSDialogNotifyIdle : public Idle
 {
 // used to send message
@@ -42,19 +54,21 @@ class JSDialogNotifyIdle : public Idle
 std::string m_LastNotificationMessage;
 bool m_bForce;
 
+std::deque>> 
m_aMessageQueue;
+
 public:
 JSDialogNotifyIdle(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
std::string sTypeOfJSON);
 
 void Invoke() override;
-void ForceUpdate();
-void sendClose();
-VclPtr getNotifierWindow() { return m_aNotifierWindow; }
-void updateStatus(VclPtr pWindow);
+
+void forceUpdate();
+void sendMessage(jsdialog::MessageType eType, VclPtr pWindow);
 
 private:
 void send(tools::JsonWriter& aJsonWriter);
-std::unique_ptr dumpStatus() const;
+std::unique_ptr generateFullUpdate() const;
+std::unique_ptr 
generateWidgetUpdate(VclPtr pWindow) const;
 std::unique_ptr generateCloseMessage() const;
 };
 
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 81ba11f92fb9..3741457a4186 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -25,6 +25,7 @@
 #include 
 #include 
 #include 
+#include 
 
 JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr aNotifierWindow,
VclPtr aContentWindow, 
std::string sTypeOfJSON)
@@ -38,7 +39,7 @@ JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr 
aNotifierWindow,
 SetPriority(TaskPriority::POST_PAINT);
 }
 
-void JSDialogNotifyIdle::ForceUpdate() { m_bForce = true; }
+void JSDialogNotifyIdle::forceUpdate() { m_bForce = true; }
 
 void JSDialogNotifyIdle::send(tools::JsonWriter& aJsonWriter)
 {
@@ -65,7 +66,12 @@ void JSDialogNotifyIdle::send(tools::JsonWriter& aJsonWriter)
 }
 }
 
-std::unique_ptr JSDialogNotifyIdle::dumpStatus() const
+void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType eType, 
VclPtr pWindow)
+{
+m_aMessageQueue.push_back(std::make_pair(eType, pWindow));
+}
+
+std::unique_ptr JSDialogNotifyIdle::generateFullUpdate() 
const
 {
 std::unique_ptr aJsonWriter(new tools::JsonWriter());
 
@@ -97,49 +103,20 @@ std::unique_ptr 
JSDialogNotifyIdle::dumpStatus() const
 return aJsonWriter;
 }
 
-void JSDialogNotifyIdle::updateStatus(VclPtr pWindow)
+std::unique_ptr
+JSDialogNotifyIdle::generateWidgetUpdate(VclPtr pWindow) const
 {
-if (!m_aNotifierWindow)
-return;
+std::unique_ptr aJsonWriter(new tools::JsonWriter());
 
-// will be deprecated soon
-if (m_aNotifierWindow->IsReallyVisible())
+aJsonWriter->put("jsontype", m_sTypeOfJSON);
+aJsonWriter->put("action", "update");
+aJsonWriter->put("id", m_aNotifierWindow->GetLOKWindowId());
 {
-if (const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aNotifierWindow->GetLOKNotifier())
-{
-tools::JsonWriter aJsonWriter;
-
-aJsonWriter.put("commandName", ".uno:jsdialog");
-aJsonWriter.put("success", "true");
-{
-auto aResult = aJsonWriter.startNode("result");
-aJsonWriter.put("dialog_id", 
m_aNotifierWindow->GetLOKWindowId());
-aJsonWriter.put("control_id", pWindow->get_id());
-{
-auto aEntries = aJsonWriter.startNode("control");
-pWindow->DumpAsPropertyTree(aJsonWriter);
-}
-}
-
-
pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_UNO_COMMAND_RESULT,
-  aJsonWriter.extractData());
-}
+auto aEntries = aJsonWriter->startNode("control");
+pWindow->DumpAsPropertyTree(*aJsonWriter);
 }
 
-// new approach - update also if hidden
-if (const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aNotifierWindow->GetLOKNotifier())
-{
-tools::JsonWriter aJsonWriter;
-
-aJsonWriter.put("jsontype", 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-14 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   18 
 vcl/jsdialog/jsdialogbuilder.cxx |   50 +++
 2 files changed, 68 insertions(+)

New commits:
commit 95bddeaa8176ca4c79274632fce24181dcd8bc0a
Author: Szymon Kłos 
AuthorDate: Wed Dec 16 23:00:11 2020 +0300
Commit: Szymon Kłos 
CommitDate: Thu Jan 14 10:21:29 2021 +0100

jsdialogs: implemented IconView

Change-Id: I05f5009efc879aaf3fc6055ff8dfa7c26aa33d1b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108983
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109244
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 8740ce5db983..ca59aab24924 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -28,6 +28,7 @@ class ToolBox;
 class ComboBox;
 class VclMultiLineEdit;
 class SvTabListBox;
+class IconView;
 
 typedef std::map WidgetMap;
 
@@ -174,6 +175,7 @@ public:
 virtual std::unique_ptr weld_text_view(const OString& id) 
override;
 virtual std::unique_ptr weld_tree_view(const OString& id) 
override;
 virtual std::unique_ptr weld_expander(const OString& id) 
override;
+virtual std::unique_ptr weld_icon_view(const OString& id) 
override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -444,4 +446,20 @@ public:
 virtual void set_expanded(bool bExpand) override;
 };
 
+class JSIconView : public JSWidget
+{
+public:
+JSIconView(JSDialogSender* pSender, ::IconView* pIconView, 
SalInstanceBuilder* pBuilder,
+   bool bTakeOwnership);
+
+virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+const OUString* pIconName, weld::TreeIter* pRet) 
override;
+
+virtual void insert(int pos, const OUString* pStr, const OUString* pId,
+const VirtualDevice* pIcon, weld::TreeIter* pRet) 
override;
+virtual void clear() override;
+virtual void select(int pos) override;
+virtual void unselect(int pos) override;
+};
+
 /* 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 921552a7d32c..81ba11f92fb9 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -667,6 +667,18 @@ std::unique_ptr 
JSInstanceBuilder::weld_expander(const OString&
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_icon_view(const 
OString& id)
+{
+::IconView* pIconView = m_xBuilder->get<::IconView>(id);
+auto pWeldWidget
+= pIconView ? std::make_unique(this, pIconView, this, 
false) : nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
 VclMessageType 
eMessageType,
 VclButtonsType 
eButtonType,
@@ -1056,4 +1068,42 @@ void JSExpander::set_expanded(bool bExpand)
 notifyDialogState();
 }
 
+JSIconView::JSIconView(JSDialogSender* pSender, ::IconView* pIconView, 
SalInstanceBuilder* pBuilder,
+   bool bTakeOwnership)
+: JSWidget(pSender, pIconView, pBuilder, 
bTakeOwnership)
+{
+}
+
+void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId,
+const OUString* pIconName, weld::TreeIter* pRet)
+{
+SalInstanceIconView::insert(pos, pStr, pId, pIconName, pRet);
+notifyDialogState();
+}
+
+void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId,
+const VirtualDevice* pIcon, weld::TreeIter* pRet)
+{
+SalInstanceIconView::insert(pos, pStr, pId, pIcon, pRet);
+notifyDialogState();
+}
+
+void JSIconView::clear()
+{
+SalInstanceIconView::clear();
+notifyDialogState();
+}
+
+void JSIconView::select(int pos)
+{
+SalInstanceIconView::select(pos);
+notifyDialogState();
+}
+
+void JSIconView::unselect(int pos)
+{
+SalInstanceIconView::unselect(pos);
+notifyDialogState();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-13 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |  135 +++--
 vcl/jsdialog/jsdialogbuilder.cxx |  219 +++
 2 files changed, 169 insertions(+), 185 deletions(-)

New commits:
commit 8e6237ff3a5304d9e8ddf930d004165d777d1fc4
Author: Szymon Kłos 
AuthorDate: Tue Jan 12 14:30:05 2021 +0100
Commit: Szymon Kłos 
CommitDate: Wed Jan 13 11:08:08 2021 +0100

jsdialog: use shared sender

Change-Id: I6d1047715cf6c29e9281c66d266ed4b888ed784c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109171
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 2df2aaeb3ad1..8740ce5db983 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -23,7 +23,6 @@
 #include 
 #include 
 #include 
-#include 
 
 class ToolBox;
 class ComboBox;
@@ -63,10 +62,11 @@ class JSDialogSender
 std::unique_ptr mpIdleNotify;
 
 public:
+JSDialogSender() = default;
 JSDialogSender(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
std::string sTypeOfJSON)
-: mpIdleNotify(new JSDialogNotifyIdle(aNotifierWindow, aContentWindow, 
sTypeOfJSON))
 {
+initializeSender(aNotifierWindow, aContentWindow, sTypeOfJSON);
 }
 
 virtual ~JSDialogSender() = default;
@@ -74,6 +74,13 @@ public:
 virtual void notifyDialogState(bool bForce = false);
 void sendClose();
 virtual void sendUpdate(VclPtr pWindow);
+
+protected:
+void initializeSender(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
+  std::string sTypeOfJSON)
+{
+mpIdleNotify.reset(new JSDialogNotifyIdle(aNotifierWindow, 
aContentWindow, sTypeOfJSON));
+}
 };
 
 class JSDropTarget final
@@ -110,7 +117,7 @@ public:
 void fire_dragEnter(const 
css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
 };
 
-class JSInstanceBuilder : public SalInstanceBuilder
+class JSInstanceBuilder : public SalInstanceBuilder, public JSDialogSender
 {
 sal_uInt64 m_nWindowId;
 /// used in case of tab pages where dialog is not a direct top level
@@ -174,24 +181,35 @@ public:
 const OUString& 
rPrimaryMessage);
 
 private:
+const std::string& GetTypeOfJSON();
 VclPtr& GetContentWindow();
 VclPtr& GetNotifierWindow();
 };
 
-template 
-class JSWidget : public BaseInstanceClass, public JSDialogSender
+template  class JSWidget : public 
BaseInstanceClass
 {
 protected:
 rtl::Reference m_xDropTarget;
 bool m_bIsFreezed;
 
+JSDialogSender* m_pSender;
+
 public:
-JSWidget(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
- VclClass* pObject, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
- std::string sTypeOfJSON)
+JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* 
pBuilder,
+ bool bTakeOwnership)
 : BaseInstanceClass(pObject, pBuilder, bTakeOwnership)
-, JSDialogSender(aNotifierWindow, aContentWindow, sTypeOfJSON)
 , m_bIsFreezed(false)
+, m_pSender(pSender)
+{
+}
+
+JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* 
pBuilder,
+ const a11yref& rAlly, FactoryFunction pUITestFactoryFunction, 
void* pUserData,
+ bool bTakeOwnership)
+: BaseInstanceClass(pObject, pBuilder, rAlly, pUITestFactoryFunction, 
pUserData,
+bTakeOwnership)
+, m_bIsFreezed(false)
+, m_pSender(pSender)
 {
 }
 
@@ -234,25 +252,30 @@ public:
 m_bIsFreezed = false;
 }
 
-virtual void sendUpdate(VclPtr pWindow) override
+void sendClose()
+{
+if (m_pSender)
+m_pSender->sendClose();
+}
+
+void sendUpdate(VclPtr pWindow)
 {
-if (!m_bIsFreezed)
-JSDialogSender::sendUpdate(pWindow);
+if (!m_bIsFreezed && m_pSender)
+m_pSender->sendUpdate(pWindow);
 }
 
-virtual void notifyDialogState(bool bForce = false) override
+void notifyDialogState(bool bForce = false)
 {
-if (!m_bIsFreezed || bForce)
-JSDialogSender::notifyDialogState(bForce);
+if ((!m_bIsFreezed || bForce) && m_pSender)
+m_pSender->notifyDialogState(bForce);
 }
 };
 
 class JSDialog : public JSWidget
 {
 public:
-JSDialog(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
- ::Dialog* pDialog, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
- std::string sTypeOfJSON);
+JSDialog(JSDialogSender* pSender, ::Dialog* pDialog, SalInstanceBuilder* 
pBuilder,
+ bool bTakeOwnership);
 
 virtual void collapse(weld::Widget* pEdit, weld::Widget* pButton) override;
 virtual void undo_collapse() override;
@@ -262,34 +285,31 @@ public:
 class JSLabel : public JSWidget
 {
 public:
-JSLabel(VclPtr 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2021-01-05 Thread Henry Castro (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |5 +
 vcl/jsdialog/jsdialogbuilder.cxx |   20 
 vcl/source/window/builder.cxx|3 ++-
 3 files changed, 27 insertions(+), 1 deletion(-)

New commits:
commit 88dc324436af556515317662822eaf5c2c34fd26
Author: Henry Castro 
AuthorDate: Fri Dec 25 13:29:42 2020 -0400
Commit: Henry Castro 
CommitDate: Tue Jan 5 16:04:04 2021 +0100

jsdialog: use the "WindowShow/WindowHide" to notify

If the "Macro Security Warning" message dialog is
disabled the idle notifier, then it is used, the
"WindowShow/Window Hide" events to notify client side.

Change-Id: I48281cf5b76285a86f951eb057454610e266b85f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108290
Tested-by: Jenkins
Reviewed-by: Henry Castro 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 26fd022b1485..c31c3e5fa560 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -343,6 +343,11 @@ public:
 
 class JSMessageDialog : public SalInstanceMessageDialog, public JSDialogSender
 {
+DECL_LINK(on_dump_status, void*, void);
+DECL_LINK(on_window_event, VclWindowEvent&, void);
+
+bool m_bNotifyCreated;
+
 public:
 JSMessageDialog(::MessageDialog* pDialog, VclPtr 
aContentWindow,
 SalInstanceBuilder* pBuilder, bool bTakeOwnership);
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8fba06677b74..19f8780d2740 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -894,6 +894,11 @@ JSMessageDialog::JSMessageDialog(::MessageDialog* pDialog, 
VclPtr a
 : SalInstanceMessageDialog(pDialog, pBuilder, bTakeOwnership)
 , JSDialogSender(m_xMessageDialog, aContentWindow, "dialog")
 {
+if (aContentWindow && aContentWindow->IsDisableIdleNotify())
+{
+pDialog->AddEventListener(LINK(this, JSMessageDialog, 
on_window_event));
+m_bNotifyCreated = false;
+}
 }
 
 void JSMessageDialog::set_primary_text(const OUString& rText)
@@ -908,6 +913,21 @@ void JSMessageDialog::set_secondary_text(const OUString& 
rText)
 notifyDialogState();
 }
 
+IMPL_LINK_NOARG(JSMessageDialog, on_dump_status, void*, void) { 
JSDialogSender::dumpStatus(); }
+
+IMPL_LINK(JSMessageDialog, on_window_event, VclWindowEvent&, rEvent, void)
+{
+if (rEvent.GetId() == VclEventId::WindowShow && !m_bNotifyCreated)
+{
+Application::PostUserEvent(LINK(this, JSMessageDialog, 
on_dump_status));
+m_bNotifyCreated = true;
+}
+else if (rEvent.GetId() == VclEventId::WindowHide || rEvent.GetId() == 
VclEventId::WindowClose)
+{
+sendClose();
+}
+}
+
 JSCheckButton::JSCheckButton(VclPtr aNotifierWindow,
  VclPtr aContentWindow, ::CheckBox* 
pCheckBox,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership,
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index ee7c114c851c..dde33eb5bc86 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -204,7 +204,8 @@ weld::Builder* Application::CreateBuilder(weld::Widget* 
pParent, const OUString
 || rUIFile == "modules/scalc/ui/ttestdialog.ui"
 || rUIFile == "modules/scalc/ui/ztestdialog.ui"
 || rUIFile == "modules/scalc/ui/chisquaretestdialog.ui"
-|| rUIFile == "modules/scalc/ui/fourieranalysisdialog.ui")
+|| rUIFile == "modules/scalc/ui/fourieranalysisdialog.ui"
+|| rUIFile == "uui/ui/macrowarnmedium.ui")
 {
 bUseJSBuilder = true;
 }
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-05 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |5 +++--
 vcl/jsdialog/jsdialogbuilder.cxx |   33 +
 2 files changed, 20 insertions(+), 18 deletions(-)

New commits:
commit abd08df65e278eb91c83051d07b459d2e7f420ca
Author: Szymon Kłos 
AuthorDate: Tue Dec 29 09:03:14 2020 +0100
Commit: Szymon Kłos 
CommitDate: Tue Jan 5 09:39:13 2021 +0100

jsdialog: direct updates for treeview

We should use only weld:: interfaces methods
to detect moment of control's updates as all
the modifications goes through weld:: API.
Let's use higher abstraction layer and not use
vcl implementation details.

this reverts partially: 32bfa0e1c7e859aedc3988d5bfdf86f5d7bab98a

Change-Id: I2dd25c08dae3f5a95d077e2715788d636be47fe4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108433
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 8574124d7de4..26fd022b1485 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -394,8 +394,6 @@ public:
 
 class JSTreeView : public JSWidget
 {
-DECL_LINK(on_window_event, VclWindowEvent&, void);
-
 public:
 JSTreeView(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
::SvTabListBox* pTextView, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
@@ -420,6 +418,9 @@ public:
 virtual void set_text(int row, const OUString& rText, int col = -1) 
override;
 virtual void set_text(const weld::TreeIter& rIter, const OUString& rStr, 
int col = -1) override;
 
+virtual void expand_row(const weld::TreeIter& rIter) override;
+virtual void collapse_row(const weld::TreeIter& rIter) override;
+
 void drag_start();
 void drag_end();
 };
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index f0fb911d8f23..8fba06677b74 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -980,8 +980,6 @@ JSTreeView::JSTreeView(VclPtr aNotifierWindow, 
VclPtr
 : JSWidget(aNotifierWindow, 
aContentWindow, pTreeView,
 pBuilder, bTakeOwnership, 
sTypeOfJSON)
 {
-if (aNotifierWindow && aNotifierWindow->IsDisableIdleNotify())
-pTreeView->AddEventListener(LINK(this, JSTreeView, on_window_event));
 }
 
 void JSTreeView::set_toggle(int pos, TriState eState, int col)
@@ -996,7 +994,7 @@ void JSTreeView::set_toggle(int pos, TriState eState, int 
col)
 SalInstanceTreeView::set_toggle(pEntry, eState, col);
 signal_toggled(iter_col(SalInstanceTreeIter(pEntry), col));
 
-notifyDialogState();
+sendUpdate(m_xTreeView);
 }
 }
 
@@ -1042,21 +1040,12 @@ void JSTreeView::drag_end()
 
 m_xDropTarget->fire_drop(aEvent);
 
-notifyDialogState();
+sendUpdate(m_xTreeView);
 }
 
 g_DragSource = nullptr;
 }
 
-IMPL_LINK(JSTreeView, on_window_event, VclWindowEvent&, rEvent, void)
-{
-if (rEvent.GetId() == VclEventId::WindowPaint && get_visible() && 
m_xTreeView->IsDirtyModel())
-{
-sendUpdate(m_xTreeView);
-m_xTreeView->SetDirtyModel(false);
-}
-}
-
 void JSTreeView::insert(const weld::TreeIter* pParent, int pos, const 
OUString* pStr,
 const OUString* pId, const OUString* pIconName,
 VirtualDevice* pImageSurface, bool bChildrenOnDemand, 
weld::TreeIter* pRet)
@@ -1064,19 +1053,31 @@ void JSTreeView::insert(const weld::TreeIter* pParent, 
int pos, const OUString*
 SalInstanceTreeView::insert(pParent, pos, pStr, pId, pIconName, 
pImageSurface,
 bChildrenOnDemand, pRet);
 
-notifyDialogState();
+sendUpdate(m_xTreeView);
 }
 
 void JSTreeView::set_text(int row, const OUString& rText, int col)
 {
 SalInstanceTreeView::set_text(row, rText, col);
-notifyDialogState();
+sendUpdate(m_xTreeView);
 }
 
 void JSTreeView::set_text(const weld::TreeIter& rIter, const OUString& rStr, 
int col)
 {
 SalInstanceTreeView::set_text(rIter, rStr, col);
-notifyDialogState();
+sendUpdate(m_xTreeView);
+}
+
+void JSTreeView::expand_row(const weld::TreeIter& rIter)
+{
+SalInstanceTreeView::expand_row(rIter);
+sendUpdate(m_xTreeView);
+}
+
+void JSTreeView::collapse_row(const weld::TreeIter& rIter)
+{
+SalInstanceTreeView::collapse_row(rIter);
+sendUpdate(m_xTreeView);
 }
 
 JSExpander::JSExpander(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2021-01-04 Thread Henry Castro (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |1 +
 vcl/jsdialog/jsdialogbuilder.cxx |   26 ++
 2 files changed, 27 insertions(+)

New commits:
commit aaba9035ec3ec9b33101d9fab6fcf0b2720e5f17
Author: Henry Castro 
AuthorDate: Fri Dec 25 13:23:40 2020 -0400
Commit: Henry Castro 
CommitDate: Mon Jan 4 11:55:26 2021 +0100

jsdialog: override weld_message_dialog

It is required to create the "Macro Security Warning"
message dialog

Change-Id: Ic802b6e4f1a2f8c5c294aa5432f3ad5274b5e105
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108289
Tested-by: Jenkins
Reviewed-by: Henry Castro 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 8be7950b5bc2..8574124d7de4 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -151,6 +151,7 @@ public:
 const OUString& 
rUIFile);
 
 virtual ~JSInstanceBuilder() override;
+virtual std::unique_ptr weld_message_dialog(const 
OString& id) override;
 virtual std::unique_ptr weld_dialog(const OString& id) 
override;
 virtual std::unique_ptr weld_label(const OString& id) 
override;
 virtual std::unique_ptr weld_button(const OString& id) 
override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 1bef2653ae11..f0fb911d8f23 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -467,6 +467,32 @@ std::unique_ptr 
JSInstanceBuilder::weld_dialog(const OString& id)
 return pRet;
 }
 
+std::unique_ptr 
JSInstanceBuilder::weld_message_dialog(const OString& id)
+{
+std::unique_ptr pRet;
+::MessageDialog* pMessageDialog = m_xBuilder->get<::MessageDialog>(id);
+
+if (pMessageDialog)
+{
+m_nWindowId = pMessageDialog->GetLOKWindowId();
+pMessageDialog->SetLOKTunnelingState(false);
+
+InsertWindowToMap(m_nWindowId);
+
+assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");
+m_aOwnedToplevel.set(pMessageDialog);
+m_xBuilder->drop_ownership(pMessageDialog);
+
+if (id == "MacroWarnMedium")
+pMessageDialog->SetDisableIdleNotify(true);
+}
+
+pRet.reset(pMessageDialog ? new JSMessageDialog(pMessageDialog, 
m_aOwnedToplevel, this, false)
+  : nullptr);
+
+return pRet;
+}
+
 std::unique_ptr JSInstanceBuilder::weld_label(const OString& id)
 {
 ::FixedText* pLabel = m_xBuilder->get(id);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-12-28 Thread Henry Castro (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 +++
 vcl/jsdialog/jsdialogbuilder.cxx |   45 +++
 2 files changed, 49 insertions(+)

New commits:
commit 32bfa0e1c7e859aedc3988d5bfdf86f5d7bab98a
Author: Henry Castro 
AuthorDate: Thu Dec 17 11:34:46 2020 -0400
Commit: Henry Castro 
CommitDate: Mon Dec 28 13:21:02 2020 +0100

jsdialog: use "WindowPaint" event to update

If the idle notifier is disabled instead it uses
the "WindowPaint" when the model has changed to
notify update status to client side.

Anyway the "WindowPaint" is supposed to be
asynchronous.

Change-Id: I0bb99526c72510a97e3906340c1e9269478da8cb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107916
Tested-by: Jenkins
Reviewed-by: Henry Castro 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 1f5ad5563f9d..cf7b17dca2d1 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -50,6 +50,7 @@ public:
 void ForceUpdate();
 void sendClose();
 VclPtr getNotifierWindow() { return m_aNotifierWindow; }
+void updateStatus(VclPtr pWindow);
 
 private:
 void send(tools::JsonWriter& aJsonWriter);
@@ -71,6 +72,7 @@ public:
 void notifyDialogState(bool bForce = false);
 void sendClose();
 void dumpStatus();
+void sendUpdate(VclPtr pWindow);
 };
 
 class JSDropTarget final
@@ -363,6 +365,8 @@ public:
 
 class JSTreeView : public JSWidget
 {
+DECL_LINK(on_window_event, VclWindowEvent&, void);
+
 public:
 JSTreeView(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
::SvTabListBox* pTextView, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 1b7d8428c880..160ef1b512bc 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -97,6 +97,35 @@ std::unique_ptr 
JSDialogNotifyIdle::dumpStatus() const
 return aJsonWriter;
 }
 
+void JSDialogNotifyIdle::updateStatus(VclPtr pWindow)
+{
+if (!m_aNotifierWindow)
+return;
+
+if (m_aNotifierWindow->IsReallyVisible())
+{
+if (const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aNotifierWindow->GetLOKNotifier())
+{
+tools::JsonWriter aJsonWriter;
+
+aJsonWriter.put("commandName", ".uno:jsdialog");
+aJsonWriter.put("success", "true");
+{
+auto aResult = aJsonWriter.startNode("result");
+aJsonWriter.put("dialog_id", 
m_aNotifierWindow->GetLOKWindowId());
+aJsonWriter.put("control_id", pWindow->get_id());
+{
+auto aEntries = aJsonWriter.startNode("control");
+pWindow->DumpAsPropertyTree(aJsonWriter);
+}
+}
+
+
pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_UNO_COMMAND_RESULT,
+  aJsonWriter.extractData());
+}
+}
+}
+
 std::unique_ptr JSDialogNotifyIdle::generateCloseMessage() 
const
 {
 std::unique_ptr aJsonWriter(new tools::JsonWriter());
@@ -127,6 +156,11 @@ void JSDialogSender::sendClose() { 
mpIdleNotify->sendClose(); }
 
 void JSDialogSender::dumpStatus() { mpIdleNotify->Invoke(); }
 
+void JSDialogSender::sendUpdate(VclPtr pWindow)
+{
+mpIdleNotify->updateStatus(pWindow);
+}
+
 namespace
 {
 vcl::Window* extract_sal_widget(weld::Widget* pParent)
@@ -920,6 +954,8 @@ JSTreeView::JSTreeView(VclPtr aNotifierWindow, 
VclPtr
 : JSWidget(aNotifierWindow, 
aContentWindow, pTreeView,
 pBuilder, bTakeOwnership, 
sTypeOfJSON)
 {
+if (aNotifierWindow && aNotifierWindow->IsDisableIdleNotify())
+pTreeView->AddEventListener(LINK(this, JSTreeView, on_window_event));
 }
 
 void JSTreeView::set_toggle(int pos, TriState eState, int col)
@@ -986,6 +1022,15 @@ void JSTreeView::drag_end()
 g_DragSource = nullptr;
 }
 
+IMPL_LINK(JSTreeView, on_window_event, VclWindowEvent&, rEvent, void)
+{
+if (rEvent.GetId() == VclEventId::WindowPaint && get_visible() && 
m_xTreeView->IsDirtyModel())
+{
+sendUpdate(m_xTreeView);
+m_xTreeView->SetDirtyModel(false);
+}
+}
+
 JSExpander::JSExpander(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
::VclExpander* pExpander, SalInstanceBuilder* pBuilder, 
bool bTakeOwnership,
std::string sTypeOfJSON)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-12-28 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |2 +-
 vcl/jsdialog/jsdialogbuilder.cxx |   17 -
 2 files changed, 13 insertions(+), 6 deletions(-)

New commits:
commit 8b71ea32134b2eeff2a69f1113744bc11a14c6b3
Author: Szymon Kłos 
AuthorDate: Wed Dec 9 12:00:59 2020 +0100
Commit: Szymon Kłos 
CommitDate: Mon Dec 28 10:50:39 2020 +0100

jsdialog: properly destroy JsonWriter

Change-Id: Ic9bc13b60284ece25b6c72326fd2185d14e17029
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107466
Tested-by: Szymon Kłos 
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 14090f43a0e4..556e34ffd346 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -52,7 +52,7 @@ public:
 VclPtr getNotifierWindow() { return m_aNotifierWindow; }
 
 private:
-void send(std::unique_ptr aJsonWriter);
+void send(tools::JsonWriter& aJsonWriter);
 std::unique_ptr dumpStatus() const;
 std::unique_ptr generateCloseMessage() const;
 };
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 50954dcec727..0b439f57e2f3 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -40,21 +40,28 @@ JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr 
aNotifierWindow,
 
 void JSDialogNotifyIdle::ForceUpdate() { m_bForce = true; }
 
-void JSDialogNotifyIdle::send(std::unique_ptr aJsonWriter)
+void JSDialogNotifyIdle::send(tools::JsonWriter& aJsonWriter)
 {
 if (!m_aNotifierWindow)
+{
+free(aJsonWriter.extractData());
 return;
+}
 
 const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aNotifierWindow->GetLOKNotifier();
 if (pNotifier)
 {
-if (m_bForce || !aJsonWriter->isDataEquals(m_LastNotificationMessage))
+if (m_bForce || !aJsonWriter.isDataEquals(m_LastNotificationMessage))
 {
 m_bForce = false;
-m_LastNotificationMessage = aJsonWriter->extractAsStdString();
+m_LastNotificationMessage = aJsonWriter.extractAsStdString();
 pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG,
   
m_LastNotificationMessage.c_str());
 }
+else
+{
+free(aJsonWriter.extractData());
+}
 }
 }
 
@@ -101,9 +108,9 @@ std::unique_ptr 
JSDialogNotifyIdle::generateCloseMessage() co
 return aJsonWriter;
 }
 
-void JSDialogNotifyIdle::Invoke() { send(dumpStatus()); }
+void JSDialogNotifyIdle::Invoke() { send(*dumpStatus()); }
 
-void JSDialogNotifyIdle::sendClose() { send(generateCloseMessage()); }
+void JSDialogNotifyIdle::sendClose() { send(*generateCloseMessage()); }
 
 void JSDialogSender::notifyDialogState(bool bForce)
 {
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2020-12-22 Thread Henry Castro (via logerrit)
 vcl/inc/salvtables.hxx|2 ++
 vcl/jsdialog/executor.cxx |   20 +---
 vcl/source/app/salvtables.cxx |7 +++
 3 files changed, 22 insertions(+), 7 deletions(-)

New commits:
commit 07ba7227104f5c30a6dbaa88314cf62aac28b7c5
Author: Henry Castro 
AuthorDate: Thu Dec 17 11:02:40 2020 -0400
Commit: Henry Castro 
CommitDate: Tue Dec 22 13:04:47 2020 +0100

jsdialog: add the "expand" action

to the tree list view control

Change-Id: I69f1b06748053fdfe9164c52e889629e51f91409
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107914
Tested-by: Jenkins
Reviewed-by: Henry Castro 

diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 47afc48903f2..c435230653c5 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1566,6 +1566,8 @@ public:
 
 virtual bool get_iter_first(weld::TreeIter& rIter) const override;
 
+virtual bool get_iter_abs_pos(weld::TreeIter& rIter, int nPos) const;
+
 virtual bool iter_next_sibling(weld::TreeIter& rIter) const override;
 
 virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index b2103fbe865f..0ff259e7bfd4 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -179,7 +179,7 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 }
 else if (sControlType == "treeview")
 {
-auto pTreeView = dynamic_cast(pWidget);
+auto pTreeView = dynamic_cast(pWidget);
 if (pTreeView)
 {
 if (sAction == "change")
@@ -209,6 +209,16 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 LOKTrigger::trigger_row_activated(*pTreeView);
 return true;
 }
+else if (sAction == "expand")
+{
+OString nRowString
+= OUStringToOString(rData["data"], 
RTL_TEXTENCODING_ASCII_US);
+int nAbsPos = std::atoi(nRowString.getStr());
+std::unique_ptr 
itEntry(pTreeView->make_iterator());
+pTreeView->get_iter_abs_pos(*itEntry, nAbsPos);
+pTreeView->expand_row(*itEntry);
+return true;
+}
 else if (sAction == "dragstart")
 {
 OString nRowString
@@ -216,17 +226,13 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 int nRow = std::atoi(nRowString.getStr());
 
 pTreeView->select(nRow);
+pTreeView->drag_start();
 
-JSTreeView* pJSTreeView = 
dynamic_cast(pTreeView);
-if (pJSTreeView)
-pJSTreeView->drag_start();
 return true;
 }
 else if (sAction == "dragend")
 {
-JSTreeView* pJSTreeView = 
dynamic_cast(pTreeView);
-if (pJSTreeView)
-pJSTreeView->drag_end();
+pTreeView->drag_end();
 return true;
 }
 }
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index e2e322e725fa..47563271e05b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4329,6 +4329,13 @@ bool SalInstanceTreeView::get_iter_first(weld::TreeIter& 
rIter) const
 return rVclIter.iter != nullptr;
 }
 
+bool SalInstanceTreeView::get_iter_abs_pos(weld::TreeIter& rIter, int nAbsPos) 
const
+{
+SalInstanceTreeIter& rVclIter = static_cast(rIter);
+rVclIter.iter = m_xTreeView->GetEntryAtAbsPos(nAbsPos);
+return rVclIter.iter != nullptr;
+}
+
 bool SalInstanceTreeView::iter_next_sibling(weld::TreeIter& rIter) const
 {
 SalInstanceTreeIter& rVclIter = static_cast(rIter);
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-11-27 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   55 +++
 vcl/jsdialog/executor.cxx|   21 +
 vcl/jsdialog/jsdialogbuilder.cxx |  123 +++
 3 files changed, 199 insertions(+)

New commits:
commit 3000f3ee1ac63deff58fa5725a6f6c2f05aec9bb
Author: Szymon Kłos 
AuthorDate: Wed Nov 18 10:12:38 2020 +0100
Commit: Szymon Kłos 
CommitDate: Fri Nov 27 11:42:16 2020 +0100

jsdialog:  drag and drop support for TreeView

Change-Id: I67e2eb986b48591b7f758bbb5c1d72b6a322d4d8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106705
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 4b9e042960f4..ab7c038648d3 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -19,6 +19,11 @@
 #include 
 #include 
 
+#include 
+#include 
+#include 
+#include 
+
 class ToolBox;
 class ComboBox;
 class VclMultiLineEdit;
@@ -58,6 +63,40 @@ public:
 void notifyDialogState(bool bForce = false);
 };
 
+class JSDropTarget final
+: public cppu::WeakComponentImplHelper
+{
+osl::Mutex m_aMutex;
+
std::vector> 
m_aListeners;
+
+public:
+JSDropTarget();
+
+// XInitialization
+virtual void SAL_CALL initialize(const css::uno::Sequence& 
rArgs) override;
+
+// XDropTarget
+virtual void SAL_CALL addDropTargetListener(
+const 
css::uno::Reference&) override;
+virtual void SAL_CALL removeDropTargetListener(
+const 
css::uno::Reference&) override;
+virtual sal_Bool SAL_CALL isActive() override;
+virtual void SAL_CALL setActive(sal_Bool active) override;
+virtual sal_Int8 SAL_CALL getDefaultActions() override;
+virtual void SAL_CALL setDefaultActions(sal_Int8 actions) override;
+
+OUString SAL_CALL getImplementationName() override;
+
+sal_Bool SAL_CALL supportsService(OUString const& ServiceName) override;
+
+css::uno::Sequence SAL_CALL getSupportedServiceNames() override;
+
+void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde);
+
+void fire_dragEnter(const 
css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
+};
+
 class JSInstanceBuilder : public SalInstanceBuilder
 {
 sal_uInt64 m_nWindowId;
@@ -128,6 +167,9 @@ private:
 template 
 class JSWidget : public BaseInstanceClass, public JSDialogSender
 {
+protected:
+rtl::Reference m_xDropTarget;
+
 public:
 JSWidget(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
  VclClass* pObject, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
@@ -155,6 +197,14 @@ public:
 BaseInstanceClass::set_sensitive(sensitive);
 notifyDialogState();
 }
+
+virtual css::uno::Reference 
get_drop_target() override
+{
+if (!m_xDropTarget)
+m_xDropTarget.set(new JSDropTarget);
+
+return m_xDropTarget.get();
+}
 };
 
 class JSDialog : public JSWidget
@@ -309,6 +359,11 @@ public:
 using SalInstanceTreeView::select;
 /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
 virtual void select(int pos) override;
+
+virtual weld::TreeView* get_drag_source() const override;
+
+void drag_start();
+void drag_end();
 };
 
 class JSExpander : public JSWidget
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 24e3eb1f14d3..13ffc1a33e06 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -206,6 +206,27 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 
 pTreeView->select(nRow);
 LOKTrigger::trigger_row_activated(*pTreeView);
+return true;
+}
+else if (sAction == "dragstart")
+{
+OString nRowString
+= OUStringToOString(rData["data"], 
RTL_TEXTENCODING_ASCII_US);
+int nRow = std::atoi(nRowString.getStr());
+
+pTreeView->select(nRow);
+
+JSTreeView* pJSTreeView = 
dynamic_cast(pTreeView);
+if (pJSTreeView)
+pJSTreeView->drag_start();
+return true;
+}
+else if (sAction == "dragend")
+{
+JSTreeView* pJSTreeView = 
dynamic_cast(pTreeView);
+if (pJSTreeView)
+pJSTreeView->drag_end();
+return true;
 }
 }
 }
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 4fb351b5439f..58c8c64d1108 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -24,6 +24,7 @@
 #include 
 #include 
 #include 
+#include 
 
 JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr aNotifierWindow,
 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-11-26 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   11 +++
 vcl/jsdialog/executor.cxx|   12 
 vcl/jsdialog/jsdialogbuilder.cxx |   28 
 3 files changed, 51 insertions(+)

New commits:
commit f424bed38ce34a3f73dafb6de20632ed8275cf18
Author: Szymon Kłos 
AuthorDate: Tue Nov 17 14:32:04 2020 +0100
Commit: Szymon Kłos 
CommitDate: Thu Nov 26 18:12:10 2020 +0100

jsdialog: implemented Expander widget

Change-Id: Ib0aee0e01c662a4d6a9231d9a1a951c9fa68eff4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106693
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 5d7df8086ae4..4b9e042960f4 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -113,6 +113,7 @@ public:
 virtual std::unique_ptr weld_toolbar(const OString& id) 
override;
 virtual std::unique_ptr weld_text_view(const OString& id) 
override;
 virtual std::unique_ptr weld_tree_view(const OString& id) 
override;
+virtual std::unique_ptr weld_expander(const OString& id) 
override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -310,4 +311,14 @@ public:
 virtual void select(int pos) override;
 };
 
+class JSExpander : public JSWidget
+{
+public:
+JSExpander(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
+   ::VclExpander* pExpander, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
+   std::string sTypeOfJSON);
+
+virtual void set_expanded(bool bExpand) override;
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 6ded26055270..24e3eb1f14d3 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -209,6 +209,18 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& 
rWidget, StringMap& rDat
 }
 }
 }
+else if (sControlType == "expander")
+{
+auto pExpander = dynamic_cast(pWidget);
+if (pExpander)
+{
+if (sAction == "toggle")
+{
+pExpander->set_expanded(!pExpander->get_expanded());
+return true;
+}
+}
+}
 }
 
 return false;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index b72dae272500..4fb351b5439f 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -452,6 +452,20 @@ std::unique_ptr 
JSInstanceBuilder::weld_tree_view(const OString&
 return pWeldWidget;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_expander(const 
OString& id)
+{
+VclExpander* pExpander = m_xBuilder->get(id);
+auto pWeldWidget = pExpander
+   ? std::make_unique(GetNotifierWindow(), 
GetContentWindow(),
+  pExpander, this, 
false, m_sTypeOfJSON)
+   : nullptr;
+
+if (pWeldWidget)
+RememberWidget(id, pWeldWidget.get());
+
+return pWeldWidget;
+}
+
 weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent,
 VclMessageType 
eMessageType,
 VclButtonsType 
eButtonType,
@@ -779,4 +793,18 @@ void JSTreeView::select(int pos)
 enable_notify_events();
 }
 
+JSExpander::JSExpander(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
+   ::VclExpander* pExpander, SalInstanceBuilder* pBuilder, 
bool bTakeOwnership,
+   std::string sTypeOfJSON)
+: JSWidget(aNotifierWindow, 
aContentWindow, pExpander,
+   pBuilder, bTakeOwnership, 
sTypeOfJSON)
+{
+}
+
+void JSExpander::set_expanded(bool bExpand)
+{
+SalInstanceExpander::set_expanded(bExpand);
+notifyDialogState();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2020-11-26 Thread Szymon Kłos (via logerrit)
 vcl/inc/salvtables.hxx   |   17 +
 vcl/jsdialog/jsdialogbuilder.cxx |5 +
 vcl/source/app/salvtables.cxx|   20 
 3 files changed, 22 insertions(+), 20 deletions(-)

New commits:
commit e013d21d80893279e9f4148e5e55fae63ab028f2
Author: Szymon Kłos 
AuthorDate: Thu Nov 12 14:28:47 2020 +0100
Commit: Szymon Kłos 
CommitDate: Thu Nov 26 10:33:53 2020 +0100

jsdialog: signal when treeview element is toggled

Change-Id: If69eac02db386fd94420aff5a8b082281e913c15
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106658
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 343da9cf79f0..298f52f53637 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1300,6 +1300,23 @@ public:
 virtual ~SalInstanceTextView() override;
 };
 
+struct SalInstanceTreeIter : public weld::TreeIter
+{
+SalInstanceTreeIter(const SalInstanceTreeIter* pOrig)
+: iter(pOrig ? pOrig->iter : nullptr)
+{
+}
+SalInstanceTreeIter(SvTreeListEntry* pIter)
+: iter(pIter)
+{
+}
+virtual bool equal(const TreeIter& rOther) const override
+{
+return iter == static_cast(rOther).iter;
+}
+SvTreeListEntry* iter;
+};
+
 class SalInstanceTreeView : public SalInstanceContainer, public virtual 
weld::TreeView
 {
 protected:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 1ad0f6e73e90..b72dae272500 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -749,7 +749,12 @@ void JSTreeView::set_toggle(int pos, TriState eState, int 
col)
 pEntry = m_xTreeView->Next(pEntry);
 
 if (pEntry)
+{
 SalInstanceTreeView::set_toggle(pEntry, eState, col);
+signal_toggled(iter_col(SalInstanceTreeIter(pEntry), col));
+
+notifyDialogState();
+}
 }
 
 void JSTreeView::select(int pos)
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 4483e087c1e5..c4ee05c86b84 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3263,26 +3263,6 @@ IMPL_LINK(SalInstanceEntry, CursorListener, 
VclWindowEvent&, rEvent, void)
 
 IMPL_LINK_NOARG(SalInstanceEntry, ActivateHdl, Edit&, bool) { return 
m_aActivateHdl.Call(*this); }
 
-namespace
-{
-struct SalInstanceTreeIter : public weld::TreeIter
-{
-SalInstanceTreeIter(const SalInstanceTreeIter* pOrig)
-: iter(pOrig ? pOrig->iter : nullptr)
-{
-}
-SalInstanceTreeIter(SvTreeListEntry* pIter)
-: iter(pIter)
-{
-}
-virtual bool equal(const TreeIter& rOther) const override
-{
-return iter == static_cast(rOther).iter;
-}
-SvTreeListEntry* iter;
-};
-}
-
 class SalInstanceTreeView;
 
 static SalInstanceTreeView* g_DragSource;
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2020-11-24 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx   |  108 ++
 vcl/jsdialog/jsdialogbuilder.cxx   |  264 -
 vcl/source/control/WeldedTabbedNotebookbar.cxx |4 
 vcl/source/window/builder.cxx  |   10 
 4 files changed, 257 insertions(+), 129 deletions(-)

New commits:
commit 5814084f02f3d660fc28afd6a053050073944b81
Author: Szymon Kłos 
AuthorDate: Wed Oct 21 15:45:19 2020 +0200
Commit: Szymon Kłos 
CommitDate: Tue Nov 24 18:22:57 2020 +0100

jsdialog: use separate content and notificator windows

Change-Id: I42208dd69bc790d136637253d7f1ae39a6306820
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106503
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index f486685c7dd9..91640f7a4ccd 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -27,12 +27,17 @@ typedef std::map WidgetMap;
 
 class JSDialogNotifyIdle : public Idle
 {
-VclPtr m_aWindow;
+// used to send message
+VclPtr m_aNotifierWindow;
+// used to generate JSON
+VclPtr m_aContentWindow;
+std::string m_sTypeOfJSON;
 std::string m_LastNotificationMessage;
 bool m_bForce;
 
 public:
-JSDialogNotifyIdle(VclPtr aWindow);
+JSDialogNotifyIdle(VclPtr aNotifierWindow, 
VclPtr aContentWindow,
+   std::string sTypeOfJSON);
 
 void Invoke() override;
 void ForceUpdate();
@@ -43,8 +48,9 @@ class JSDialogSender
 std::unique_ptr mpIdleNotify;
 
 public:
-JSDialogSender(VclPtr aOwnedToplevel)
-: mpIdleNotify(new JSDialogNotifyIdle(aOwnedToplevel))
+JSDialogSender(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
+   std::string sTypeOfJSON)
+: mpIdleNotify(new JSDialogNotifyIdle(aNotifierWindow, aContentWindow, 
sTypeOfJSON))
 {
 }
 
@@ -56,6 +62,8 @@ class JSInstanceBuilder : public SalInstanceBuilder
 sal_uInt64 m_nWindowId;
 /// used in case of tab pages where dialog is not a direct top level
 VclPtr m_aParentDialog;
+VclPtr m_aContentWindow;
+std::string m_sTypeOfJSON;
 bool m_bHasTopLevelDialog;
 bool m_bIsNotebookbar;
 
@@ -67,12 +75,26 @@ class JSInstanceBuilder : public SalInstanceBuilder
 void RememberWidget(const OString& id, weld::Widget* pWidget);
 static weld::Widget* FindWeldWidgetsMap(sal_uInt64 nWindowId, const 
OString& rWidget);
 
-public:
+/// used for dialogs
 JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIRoot, const 
OUString& rUIFile);
-/// optional nWindowId is used if getting parent id failed
+/// used for notebookbar, optional nWindowId is used if getting parent id 
failed
 JSInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const 
OUString& rUIFile,
   const css::uno::Reference& rFrame,
   sal_uInt64 nWindowId = 0);
+/// for autofilter dropdown
+JSInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const 
OUString& rUIFile);
+
+public:
+static JSInstanceBuilder* CreateDialogBuilder(weld::Widget* pParent, const 
OUString& rUIRoot,
+  const OUString& rUIFile);
+static JSInstanceBuilder*
+CreateNotebookbarBuilder(vcl::Window* pParent, const OUString& rUIRoot, 
const OUString& rUIFile,
+ const css::uno::Reference& 
rFrame,
+ sal_uInt64 nWindowId = 0);
+static JSInstanceBuilder* CreateAutofilterWindowBuilder(vcl::Window* 
pParent,
+const OUString& 
rUIRoot,
+const OUString& 
rUIFile);
+
 virtual ~JSInstanceBuilder() override;
 virtual std::unique_ptr weld_dialog(const OString& id) 
override;
 virtual std::unique_ptr weld_label(const OString& id) 
override;
@@ -93,16 +115,21 @@ public:
 VclMessageType 
eMessageType,
 VclButtonsType eButtonType,
 const OUString& 
rPrimaryMessage);
+
+private:
+VclPtr& GetContentWindow();
+VclPtr& GetNotifierWindow();
 };
 
 template 
 class JSWidget : public BaseInstanceClass, public JSDialogSender
 {
 public:
-JSWidget(VclPtr aOwnedToplevel, VclClass* pObject, 
SalInstanceBuilder* pBuilder,
- bool bTakeOwnership)
+JSWidget(VclPtr aNotifierWindow, VclPtr 
aContentWindow,
+ VclClass* pObject, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership,
+ std::string sTypeOfJSON)
 : BaseInstanceClass(pObject, pBuilder, bTakeOwnership)
-, JSDialogSender(aOwnedToplevel)
+, JSDialogSender(aNotifierWindow, aContentWindow, sTypeOfJSON)
 {
 }
 
@@ -128,8 +155,9 @@ 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-07-17 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |4 +++-
 vcl/jsdialog/jsdialogbuilder.cxx |   27 +++
 2 files changed, 26 insertions(+), 5 deletions(-)

New commits:
commit 915df5936a5392f48736a4b6ba8219d727482b91
Author: Szymon Kłos 
AuthorDate: Tue Jul 7 13:15:31 2020 +0200
Commit: Szymon Kłos 
CommitDate: Fri Jul 17 10:53:27 2020 +0200

jsdialog: force update if tab is selected again

This will allow to add additional tabs in the view
(not existing in the JSON) and switching tabs still
will work properly.

Change-Id: Ia6901da3157b391502d5170f599410bfd6ea2c61
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98253
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98900
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index c9673e778c16..688744d98e0c 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -29,11 +29,13 @@ class JSDialogNotifyIdle : public Idle
 {
 VclPtr m_aWindow;
 std::string m_LastNotificationMessage;
+bool m_bForce;
 
 public:
 JSDialogNotifyIdle(VclPtr aWindow);
 
 void Invoke() override;
+void ForceUpdate();
 };
 
 class JSDialogSender
@@ -46,7 +48,7 @@ public:
 {
 }
 
-void notifyDialogState();
+void notifyDialogState(bool bForce = false);
 };
 
 class JSInstanceBuilder : public SalInstanceBuilder
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 33a7b8c3c992..25645de365bf 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -26,10 +26,13 @@ JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr 
aWindow)
 : Idle("JSDialog notify")
 , m_aWindow(aWindow)
 , m_LastNotificationMessage()
+, m_bForce(false)
 {
 SetPriority(TaskPriority::POST_PAINT);
 }
 
+void JSDialogNotifyIdle::ForceUpdate() { m_bForce = true; }
+
 void JSDialogNotifyIdle::Invoke()
 {
 try
@@ -43,8 +46,9 @@ void JSDialogNotifyIdle::Invoke()
 tools::JsonWriter aJsonWriter;
 m_aWindow->DumpAsPropertyTree(aJsonWriter);
 aJsonWriter.put("id", m_aWindow->GetLOKWindowId());
-if (!aJsonWriter.isDataEquals(m_LastNotificationMessage))
+if (m_bForce || 
!aJsonWriter.isDataEquals(m_LastNotificationMessage))
 {
+m_bForce = false;
 m_LastNotificationMessage = aJsonWriter.extractAsStdString();
 pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG,
   
m_LastNotificationMessage.c_str());
@@ -57,7 +61,12 @@ void JSDialogNotifyIdle::Invoke()
 }
 }
 
-void JSDialogSender::notifyDialogState() { mpIdleNotify->Start(); }
+void JSDialogSender::notifyDialogState(bool bForce)
+{
+if (bForce)
+mpIdleNotify->ForceUpdate();
+mpIdleNotify->Start();
+}
 
 namespace
 {
@@ -485,14 +494,24 @@ JSNotebook::JSNotebook(VclPtr 
aOwnedToplevel, ::TabControl* pContro
 
 void JSNotebook::set_current_page(int nPage)
 {
+bool bForce = false;
+int nCurrent = get_current_page();
+if (nCurrent == nPage)
+bForce = true;
+
 SalInstanceNotebook::set_current_page(nPage);
-notifyDialogState();
+notifyDialogState(bForce);
 }
 
 void JSNotebook::set_current_page(const OString& rIdent)
 {
+bool bForce = false;
+OString sCurrent = get_current_page_ident();
+if (sCurrent == rIdent)
+bForce = true;
+
 SalInstanceNotebook::set_current_page(rIdent);
-notifyDialogState();
+notifyDialogState(bForce);
 }
 
 void JSNotebook::remove_page(const OString& rIdent)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-07-16 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   10 ++
 vcl/jsdialog/jsdialogbuilder.cxx |   22 --
 2 files changed, 30 insertions(+), 2 deletions(-)

New commits:
commit 1762e6819b0d9f10b701728b8e183e87c1400137
Author: Szymon Kłos 
AuthorDate: Wed Mar 18 09:46:03 2020 +0100
Commit: Szymon Kłos 
CommitDate: Thu Jul 16 10:40:40 2020 +0200

jsdialog: regenerate JSON on dialog collapse

Change-Id: I407979546a7610630e8109b57db8c98c956baaee
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97735
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98826
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index d2d77342422a..1622cc0f6ade 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -129,6 +129,16 @@ public:
 }
 };
 
+class VCL_DLLPUBLIC JSDialog : public JSWidget
+{
+public:
+JSDialog(VclPtr aOwnedToplevel, ::Dialog* pDialog, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership);
+
+virtual void collapse(weld::Widget* pEdit, weld::Widget* pButton) override;
+virtual void undo_collapse() override;
+};
+
 class JSLabel : public JSWidget
 {
 public:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index aed000927a2a..e3245a40a73b 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -163,8 +163,8 @@ std::unique_ptr 
JSInstanceBuilder::weld_dialog(const OString& id,
 
 InsertWindowToMap(m_nWindowId);
 
-std::unique_ptr pRet(pDialog ? new 
SalInstanceDialog(pDialog, this, false)
-   : nullptr);
+std::unique_ptr pRet(
+pDialog ? new JSDialog(m_aOwnedToplevel, pDialog, this, false) : 
nullptr);
 if (bTakeOwnership && pDialog)
 {
 assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");
@@ -354,6 +354,24 @@ weld::MessageDialog* 
JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParen
 return new JSMessageDialog(xMessageDialog, nullptr, true);
 }
 
+JSDialog::JSDialog(VclPtr aOwnedToplevel, ::Dialog* pDialog,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(aOwnedToplevel, pDialog, pBuilder, 
bTakeOwnership)
+{
+}
+
+void JSDialog::collapse(weld::Widget* pEdit, weld::Widget* pButton)
+{
+SalInstanceDialog::collapse(pEdit, pButton);
+notifyDialogState();
+}
+
+void JSDialog::undo_collapse()
+{
+SalInstanceDialog::undo_collapse();
+notifyDialogState();
+}
+
 JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : JSWidget(aOwnedToplevel, pLabel, pBuilder, 
bTakeOwnership)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2020-06-29 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   18 ++
 vcl/inc/salvtables.hxx   |4 +-
 vcl/jsdialog/jsdialogbuilder.cxx |   61 ++-
 vcl/source/app/salvtables.cxx|5 +-
 4 files changed, 83 insertions(+), 5 deletions(-)

New commits:
commit ed06c5f411769c22923ae1555f9555f2460a0780
Author: Szymon Kłos 
AuthorDate: Mon Jun 15 19:03:09 2020 +0200
Commit: Szymon Kłos 
CommitDate: Mon Jun 29 15:15:25 2020 +0200

jsdialog: weld drawing area

Change-Id: I7bc75e3de99de84c59b798e4c4dad18550157e43
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96851
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97396
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index f5d0d098cb68..f68853d34037 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -62,6 +62,8 @@ class JSInstanceBuilder : public SalInstanceBuilder
 
 public:
 JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIRoot, const 
OUString& rUIFile);
+JSInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const 
OUString& rUIFile,
+  const css::uno::Reference& rFrame);
 virtual ~JSInstanceBuilder() override;
 virtual std::unique_ptr weld_dialog(const OString& id,
   bool bTakeOwnership = 
true) override;
@@ -79,6 +81,10 @@ public:
 weld_spin_button(const OString& id, bool bTakeOwnership = false) override;
 virtual std::unique_ptr
 weld_check_button(const OString& id, bool bTakeOwnership = false) override;
+virtual std::unique_ptr
+weld_drawing_area(const OString& id, const a11yref& rA11yImpl = nullptr,
+  FactoryFunction pUITestFactoryFunction = nullptr, void* 
pUserData = nullptr,
+  bool bTakeOwnership = false) override;
 
 static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent,
 VclMessageType 
eMessageType,
@@ -205,4 +211,16 @@ public:
 virtual void set_active(bool active) override;
 };
 
+class VCL_DLLPUBLIC JSDrawingArea : public SalInstanceDrawingArea, public 
JSDialogSender
+{
+public:
+JSDrawingArea(VclPtr aOwnedToplevel, VclDrawingArea* 
pDrawingArea,
+  SalInstanceBuilder* pBuilder, const a11yref& rAlly,
+  FactoryFunction pUITestFactoryFunction, void* pUserData,
+  bool bTakeOwnership = false);
+
+virtual void queue_draw() override;
+virtual void queue_draw_area(int x, int y, int width, int height) override;
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 53515ad13ac6..527e3cd2b722 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -32,7 +32,9 @@ protected:
 VclPtr m_aOwnedToplevel;
 
 public:
-SalInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const 
OUString& rUIFile);
+SalInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const 
OUString& rUIFile,
+   const css::uno::Reference& rFrame
+   = css::uno::Reference());
 
 virtual std::unique_ptr
 weld_message_dialog(const OString& id, bool bTakeOwnership = true) 
override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 28eecea4d713..b678c34333b2 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -76,7 +76,26 @@ JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, 
const OUString& rUIR
 if (pRoot && pRoot->GetParent())
 {
 m_aParentDialog = pRoot->GetParent()->GetParentWithLOKNotifier();
-m_nWindowId = m_aParentDialog->GetLOKWindowId();
+if (m_aParentDialog)
+m_nWindowId = m_aParentDialog->GetLOKWindowId();
+InsertWindowToMap(m_nWindowId);
+}
+}
+
+JSInstanceBuilder::JSInstanceBuilder(vcl::Window* pParent, const OUString& 
rUIRoot,
+ const OUString& rUIFile,
+ const 
css::uno::Reference& rFrame)
+: SalInstanceBuilder(pParent, rUIRoot, rUIFile, rFrame)
+, m_nWindowId(0)
+, m_aParentDialog(nullptr)
+, m_bHasTopLevelDialog(false)
+{
+vcl::Window* pRoot = m_xBuilder->get_widget_root();
+if (pRoot && pRoot->GetParent())
+{
+m_aParentDialog = pRoot->GetParent()->GetParentWithLOKNotifier();
+if (m_aParentDialog)
+m_nWindowId = m_aParentDialog->GetLOKWindowId();
 InsertWindowToMap(m_nWindowId);
 }
 }
@@ -272,6 +291,24 @@ std::unique_ptr 
JSInstanceBuilder::weld_check_button(const OS
 return pWeldWidget;
 }
 
+std::unique_ptr

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source

2020-05-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   17 ++
 vcl/inc/salvtables.hxx   |2 -
 vcl/jsdialog/jsdialogbuilder.cxx |   40 +++
 vcl/source/app/salvtables.cxx|2 -
 4 files changed, 59 insertions(+), 2 deletions(-)

New commits:
commit 8099c7363c6ddee8390a02389a7dedf7ab9c72b6
Author: Szymon Kłos 
AuthorDate: Wed Mar 4 16:05:10 2020 +0100
Commit: Szymon Kłos 
CommitDate: Wed May 20 14:31:37 2020 +0200

jsdialog: refresh on notebook changes

Change-Id: I81159d043add3d8bdd1b81f26f642f99c1430f73
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94183
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94558
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 24b1ef7808c1..ae8261871ee7 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -37,6 +37,8 @@ public:
 bool bTakeOwnership = 
false) override;
 virtual std::unique_ptr weld_combo_box(const OString& id,
bool bTakeOwnership 
= false) override;
+virtual std::unique_ptr weld_notebook(const OString& id,
+  bool bTakeOwnership 
= false) override;
 };
 
 template 
@@ -113,4 +115,19 @@ public:
 virtual void set_entry_text(const OUString& rText) override;
 };
 
+class VCL_DLLPUBLIC JSNotebook : public JSWidget
+{
+public:
+JSNotebook(VclPtr aOwnedToplevel, ::TabControl* pControl,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+
+virtual void set_current_page(int nPage) override;
+
+virtual void set_current_page(const OString& rIdent) override;
+
+virtual void remove_page(const OString& rIdent) override;
+
+virtual void insert_page(const OString& rIdent, const OUString& rLabel, 
int nPos) override;
+};
+
 #endif
\ No newline at end of file
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index ad41e5707218..b42440f4b477 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1028,7 +1028,7 @@ class SalInstanceNotebook : public SalInstanceContainer, 
public virtual weld::No
 {
 private:
 VclPtr m_xNotebook;
-mutable std::vector> m_aPages;
+mutable std::vector> m_aPages;
 std::map, VclPtr>> 
m_aAddedPages;
 
 DECL_LINK(DeactivatePageHdl, TabControl*, bool);
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index dc6951105763..facd3991746a 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -89,6 +89,15 @@ std::unique_ptr 
JSInstanceBuilder::weld_combo_box(const OString&
 : nullptr;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_notebook(const 
OString& id,
+ bool 
bTakeOwnership)
+{
+TabControl* pNotebook = m_xBuilder->get(id);
+return pNotebook
+   ? std::make_unique(m_aOwnedToplevel, pNotebook, 
this, bTakeOwnership)
+   : nullptr;
+}
+
 JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : JSWidget(aOwnedToplevel, pLabel, pBuilder, 
bTakeOwnership)
@@ -164,3 +173,34 @@ void JSComboBox::set_entry_text(const OUString& rText)
 SalInstanceComboBoxWithEdit::set_entry_text(rText);
 notifyDialogState();
 }
+
+JSNotebook::JSNotebook(VclPtr aOwnedToplevel, ::TabControl* 
pControl,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(aOwnedToplevel, pControl, 
pBuilder,
+  bTakeOwnership)
+{
+}
+
+void JSNotebook::set_current_page(int nPage)
+{
+SalInstanceNotebook::set_current_page(nPage);
+notifyDialogState();
+}
+
+void JSNotebook::set_current_page(const OString& rIdent)
+{
+SalInstanceNotebook::set_current_page(rIdent);
+notifyDialogState();
+}
+
+void JSNotebook::remove_page(const OString& rIdent)
+{
+SalInstanceNotebook::remove_page(rIdent);
+notifyDialogState();
+}
+
+void JSNotebook::insert_page(const OString& rIdent, const OUString& rLabel, 
int nPos)
+{
+SalInstanceNotebook::insert_page(rIdent, rLabel, nPos);
+notifyDialogState();
+}
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 82b813a819b8..c53c7603a8c4 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2157,7 +2157,7 @@ weld::Container* SalInstanceNotebook::get_page(const 
OString& rIdent) const
 if (m_aPages.size() < nPageIndex + 1U)
 m_aPages.resize(nPageIndex + 1U);
 if (!m_aPages[nPageIndex])
-m_aPages[nPageIndex].reset(new SalInstanceContainer(pChild, 
m_pBuilder, false));
+

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-05-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   16 
 vcl/jsdialog/jsdialogbuilder.cxx |   13 +
 2 files changed, 29 insertions(+)

New commits:
commit c2ead5a142be19cb74127294641ec35da9e0f5c5
Author: Szymon Kłos 
AuthorDate: Fri Feb 28 15:10:24 2020 +0100
Commit: Szymon Kłos 
CommitDate: Wed May 20 11:50:21 2020 +0200

jsdialog: react on button state change

Change-Id: I19b8b4f123373da1acc7e2815086a67bcdb43e76
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94148
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94556
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 98126bfcc12f..24b1ef7808c1 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -8,6 +8,7 @@
 #include 
 #include 
 #include 
+#include 
 
 class JSDialogSender
 {
@@ -30,6 +31,8 @@ public:
   bool bTakeOwnership = 
true) override;
 virtual std::unique_ptr weld_label(const OString& id,
 bool bTakeOwnership = 
false) override;
+virtual std::unique_ptr weld_button(const OString& id,
+  bool bTakeOwnership = 
false) override;
 virtual std::unique_ptr weld_entry(const OString& id,
 bool bTakeOwnership = 
false) override;
 virtual std::unique_ptr weld_combo_box(const OString& id,
@@ -58,6 +61,12 @@ public:
 BaseInstanceClass::hide();
 notifyDialogState();
 }
+
+virtual void set_sensitive(bool sensitive) override
+{
+BaseInstanceClass::set_sensitive(sensitive);
+notifyDialogState();
+}
 };
 
 class VCL_DLLPUBLIC JSLabel : public JSWidget
@@ -68,6 +77,13 @@ public:
 virtual void set_label(const OUString& rText) override;
 };
 
+class VCL_DLLPUBLIC JSButton : public JSWidget
+{
+public:
+JSButton(VclPtr aOwnedToplevel, ::Button* pButton, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership);
+};
+
 class VCL_DLLPUBLIC JSEntry : public JSWidget
 {
 public:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index e23e8f1a75e2..dc6951105763 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -63,6 +63,13 @@ std::unique_ptr 
JSInstanceBuilder::weld_label(const OString& id, bo
 return std::make_unique(m_aOwnedToplevel, pLabel, this, 
bTakeOwnership);
 }
 
+std::unique_ptr JSInstanceBuilder::weld_button(const OString& 
id, bool bTakeOwnership)
+{
+::Button* pButton = m_xBuilder->get<::Button>(id);
+return pButton ? std::make_unique(m_aOwnedToplevel, pButton, 
this, bTakeOwnership)
+   : nullptr;
+}
+
 std::unique_ptr JSInstanceBuilder::weld_entry(const OString& id, 
bool bTakeOwnership)
 {
 Edit* pEntry = m_xBuilder->get(id);
@@ -94,6 +101,12 @@ void JSLabel::set_label(const OUString& rText)
 notifyDialogState();
 };
 
+JSButton::JSButton(VclPtr aOwnedToplevel, ::Button* pButton,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: JSWidget(aOwnedToplevel, pButton, pBuilder, 
bTakeOwnership)
+{
+}
+
 JSEntry::JSEntry(VclPtr aOwnedToplevel, ::Edit* pEntry, 
SalInstanceBuilder* pBuilder,
  bool bTakeOwnership)
 : JSWidget(aOwnedToplevel, pEntry, pBuilder, 
bTakeOwnership)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-05-20 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   32 
 vcl/jsdialog/jsdialogbuilder.cxx |   14 ++
 2 files changed, 34 insertions(+), 12 deletions(-)

New commits:
commit 823c9f818a2d191d52e18fbb9b8b64127822fbcf
Author: Szymon Kłos 
AuthorDate: Fri Feb 28 13:47:22 2020 +0100
Commit: Szymon Kłos 
CommitDate: Wed May 20 09:49:07 2020 +0200

jsdialog: Common weld::Widget implementation

Change-Id: Iab21652c6abaf143fb421d6030f6acc394733bcb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94073
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94489
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index a82732d05f5a..98126bfcc12f 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -36,7 +36,31 @@ public:
bool bTakeOwnership 
= false) override;
 };
 
-class VCL_DLLPUBLIC JSLabel : public SalInstanceLabel, public JSDialogSender
+template 
+class JSWidget : public BaseInstanceClass, public JSDialogSender
+{
+public:
+JSWidget(VclPtr aOwnedToplevel, VclClass* pObject, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership)
+: BaseInstanceClass(pObject, pBuilder, bTakeOwnership)
+, JSDialogSender(aOwnedToplevel)
+{
+}
+
+virtual void show() override
+{
+BaseInstanceClass::show();
+notifyDialogState();
+}
+
+virtual void hide() override
+{
+BaseInstanceClass::hide();
+notifyDialogState();
+}
+};
+
+class VCL_DLLPUBLIC JSLabel : public JSWidget
 {
 public:
 JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel, 
SalInstanceBuilder* pBuilder,
@@ -44,7 +68,7 @@ public:
 virtual void set_label(const OUString& rText) override;
 };
 
-class VCL_DLLPUBLIC JSEntry : public SalInstanceEntry, public JSDialogSender
+class VCL_DLLPUBLIC JSEntry : public JSWidget
 {
 public:
 JSEntry(VclPtr aOwnedToplevel, ::Edit* pEntry, 
SalInstanceBuilder* pBuilder,
@@ -52,7 +76,7 @@ public:
 virtual void set_text(const OUString& rText) override;
 };
 
-class VCL_DLLPUBLIC JSListBox : public SalInstanceComboBoxWithoutEdit, public 
JSDialogSender
+class VCL_DLLPUBLIC JSListBox : public 
JSWidget
 {
 public:
 JSListBox(VclPtr aOwnedToplevel, ::ListBox* pListBox, 
SalInstanceBuilder* pBuilder,
@@ -62,7 +86,7 @@ public:
 virtual void remove(int pos) override;
 };
 
-class VCL_DLLPUBLIC JSComboBox : public SalInstanceComboBoxWithEdit, public 
JSDialogSender
+class VCL_DLLPUBLIC JSComboBox : public JSWidget
 {
 public:
 JSComboBox(VclPtr aOwnedToplevel, ::ComboBox* pComboBox,
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index a3a8457b3145..e23e8f1a75e2 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -84,8 +84,7 @@ std::unique_ptr 
JSInstanceBuilder::weld_combo_box(const OString&
 
 JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
-: SalInstanceLabel(pLabel, pBuilder, bTakeOwnership)
-, JSDialogSender(aOwnedToplevel)
+: JSWidget(aOwnedToplevel, pLabel, pBuilder, 
bTakeOwnership)
 {
 }
 
@@ -97,8 +96,7 @@ void JSLabel::set_label(const OUString& rText)
 
 JSEntry::JSEntry(VclPtr aOwnedToplevel, ::Edit* pEntry, 
SalInstanceBuilder* pBuilder,
  bool bTakeOwnership)
-: SalInstanceEntry(pEntry, pBuilder, bTakeOwnership)
-, JSDialogSender(aOwnedToplevel)
+: JSWidget(aOwnedToplevel, pEntry, pBuilder, 
bTakeOwnership)
 {
 }
 
@@ -110,8 +108,8 @@ void JSEntry::set_text(const OUString& rText)
 
 JSListBox::JSListBox(VclPtr aOwnedToplevel, ::ListBox* pListBox,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
-: SalInstanceComboBoxWithoutEdit(pListBox, pBuilder, bTakeOwnership)
-, JSDialogSender(aOwnedToplevel)
+: JSWidget(aOwnedToplevel, 
pListBox, pBuilder,
+  bTakeOwnership)
 {
 }
 
@@ -130,8 +128,8 @@ void JSListBox::remove(int pos)
 
 JSComboBox::JSComboBox(VclPtr aOwnedToplevel, ::ComboBox* 
pComboBox,
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
-: SalInstanceComboBoxWithEdit(pComboBox, pBuilder, bTakeOwnership)
-, JSDialogSender(aOwnedToplevel)
+: JSWidget(aOwnedToplevel, 
pComboBox, pBuilder,
+bTakeOwnership)
 {
 }
 
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-05-19 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   24 ++
 vcl/inc/salvtables.hxx   |2 -
 vcl/jsdialog/jsdialogbuilder.cxx |   58 +++
 3 files changed, 83 insertions(+), 1 deletion(-)

New commits:
commit c529dd9b964e4176fed67d3c1594978c7d26ad7b
Author: Szymon Kłos 
AuthorDate: Tue Feb 25 13:03:34 2020 +0100
Commit: Szymon Kłos 
CommitDate: Tue May 19 16:59:34 2020 +0200

jsdialog: weld::ComboBox

Change-Id: I672d2fd170e94e0b3e05384461983e5ae4a0ab35
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94072
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94488
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 956c3001fc22..a82732d05f5a 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -7,6 +7,7 @@
 #include 
 #include 
 #include 
+#include 
 
 class JSDialogSender
 {
@@ -31,6 +32,8 @@ public:
 bool bTakeOwnership = 
false) override;
 virtual std::unique_ptr weld_entry(const OString& id,
 bool bTakeOwnership = 
false) override;
+virtual std::unique_ptr weld_combo_box(const OString& id,
+   bool bTakeOwnership 
= false) override;
 };
 
 class VCL_DLLPUBLIC JSLabel : public SalInstanceLabel, public JSDialogSender
@@ -49,4 +52,25 @@ public:
 virtual void set_text(const OUString& rText) override;
 };
 
+class VCL_DLLPUBLIC JSListBox : public SalInstanceComboBoxWithoutEdit, public 
JSDialogSender
+{
+public:
+JSListBox(VclPtr aOwnedToplevel, ::ListBox* pListBox, 
SalInstanceBuilder* pBuilder,
+  bool bTakeOwnership);
+virtual void insert(int pos, const OUString& rStr, const OUString* pId,
+const OUString* pIconName, VirtualDevice* 
pImageSurface) override;
+virtual void remove(int pos) override;
+};
+
+class VCL_DLLPUBLIC JSComboBox : public SalInstanceComboBoxWithEdit, public 
JSDialogSender
+{
+public:
+JSComboBox(VclPtr aOwnedToplevel, ::ComboBox* pComboBox,
+   SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+virtual void insert(int pos, const OUString& rStr, const OUString* pId,
+const OUString* pIconName, VirtualDevice* 
pImageSurface) override;
+virtual void remove(int pos) override;
+virtual void set_entry_text(const OUString& rText) override;
+};
+
 #endif
\ No newline at end of file
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 9aa01bcd81c9..2d6acb6d38c1 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -666,7 +666,7 @@ class SalInstanceComboBox : public SalInstanceContainer, 
public virtual weld::Co
 {
 protected:
 // owner for ListBox/ComboBox UserData
-std::vector> m_aUserData;
+std::vector> m_aUserData;
 VclPtr m_xComboBox;
 ScopedVclPtr<::MenuButton> m_xMenuButton;
 OUString m_sMenuButtonRow;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8429eae74e11..a3a8457b3145 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -70,6 +70,18 @@ std::unique_ptr 
JSInstanceBuilder::weld_entry(const OString& id, bo
   : nullptr;
 }
 
+std::unique_ptr JSInstanceBuilder::weld_combo_box(const 
OString& id,
+  bool 
bTakeOwnership)
+{
+vcl::Window* pWidget = m_xBuilder->get(id);
+::ComboBox* pComboBox = dynamic_cast<::ComboBox*>(pWidget);
+if (pComboBox)
+return std::make_unique(m_aOwnedToplevel, pComboBox, this, 
bTakeOwnership);
+ListBox* pListBox = dynamic_cast(pWidget);
+return pListBox ? std::make_unique(m_aOwnedToplevel, pListBox, 
this, bTakeOwnership)
+: nullptr;
+}
+
 JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : SalInstanceLabel(pLabel, pBuilder, bTakeOwnership)
@@ -95,3 +107,49 @@ void JSEntry::set_text(const OUString& rText)
 SalInstanceEntry::set_text(rText);
 notifyDialogState();
 }
+
+JSListBox::JSListBox(VclPtr aOwnedToplevel, ::ListBox* pListBox,
+ SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+: SalInstanceComboBoxWithoutEdit(pListBox, pBuilder, bTakeOwnership)
+, JSDialogSender(aOwnedToplevel)
+{
+}
+
+void JSListBox::insert(int pos, const OUString& rStr, const OUString* pId,
+   const OUString* pIconName, VirtualDevice* pImageSurface)
+{
+SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, 
pImageSurface);
+notifyDialogState();
+}
+
+void JSListBox::remove(int pos)
+{
+SalInstanceComboBoxWithoutEdit::remove(pos);
+

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-05-19 Thread Szymon Kłos (via logerrit)
 vcl/inc/jsdialog/jsdialogbuilder.hxx |   27 --
 vcl/jsdialog/jsdialogbuilder.cxx |   51 ++-
 2 files changed, 63 insertions(+), 15 deletions(-)

New commits:
commit 9c78d8d0a8bd69fc45d845b96bcbc3bdded5f521
Author: Szymon Kłos 
AuthorDate: Mon Feb 24 18:35:18 2020 +0100
Commit: Szymon Kłos 
CommitDate: Tue May 19 13:36:22 2020 +0200

Resend jsdialog on entry change

Change-Id: Ic255b8ba56f5b355a95ddc9a9587e1747b66702a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94071
Tested-by: Jenkins CollaboraOffice 
Reviewed-by: Szymon Kłos 
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94487
Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 9d8c68516320..956c3001fc22 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -8,6 +8,19 @@
 #include 
 #include 
 
+class JSDialogSender
+{
+VclPtr m_aOwnedToplevel;
+
+public:
+JSDialogSender(VclPtr aOwnedToplevel)
+: m_aOwnedToplevel(aOwnedToplevel)
+{
+}
+
+void notifyDialogState();
+};
+
 class VCL_DLLPUBLIC JSInstanceBuilder : public SalInstanceBuilder
 {
 public:
@@ -16,16 +29,24 @@ public:
   bool bTakeOwnership = 
true) override;
 virtual std::unique_ptr weld_label(const OString& id,
 bool bTakeOwnership = 
false) override;
+virtual std::unique_ptr weld_entry(const OString& id,
+bool bTakeOwnership = 
false) override;
 };
 
-class VCL_DLLPUBLIC JSLabel : public SalInstanceLabel
+class VCL_DLLPUBLIC JSLabel : public SalInstanceLabel, public JSDialogSender
 {
-VclPtr m_aOwnedToplevel;
-
 public:
 JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel, 
SalInstanceBuilder* pBuilder,
 bool bTakeOwnership);
 virtual void set_label(const OUString& rText) override;
 };
 
+class VCL_DLLPUBLIC JSEntry : public SalInstanceEntry, public JSDialogSender
+{
+public:
+JSEntry(VclPtr aOwnedToplevel, ::Edit* pEntry, 
SalInstanceBuilder* pBuilder,
+bool bTakeOwnership);
+virtual void set_text(const OUString& rText) override;
+};
+
 #endif
\ No newline at end of file
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index ff85796d3a09..8429eae74e11 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -5,6 +5,23 @@
 #include 
 #include 
 
+void JSDialogSender::notifyDialogState()
+{
+if (!m_aOwnedToplevel)
+return;
+
+const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aOwnedToplevel->GetLOKNotifier();
+if (pNotifier)
+{
+std::stringstream aStream;
+boost::property_tree::ptree aTree = 
m_aOwnedToplevel->DumpAsPropertyTree();
+aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
+boost::property_tree::write_json(aStream, aTree);
+const std::string message = aStream.str();
+pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, 
message.c_str());
+}
+}
+
 JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& 
rUIRoot,
  const OUString& rUIFile)
 : SalInstanceBuilder(dynamic_cast(pParent)
@@ -46,25 +63,35 @@ std::unique_ptr 
JSInstanceBuilder::weld_label(const OString& id, bo
 return std::make_unique(m_aOwnedToplevel, pLabel, this, 
bTakeOwnership);
 }
 
+std::unique_ptr JSInstanceBuilder::weld_entry(const OString& id, 
bool bTakeOwnership)
+{
+Edit* pEntry = m_xBuilder->get(id);
+return pEntry ? std::make_unique(m_aOwnedToplevel, pEntry, this, 
bTakeOwnership)
+  : nullptr;
+}
+
 JSLabel::JSLabel(VclPtr aOwnedToplevel, FixedText* pLabel,
  SalInstanceBuilder* pBuilder, bool bTakeOwnership)
 : SalInstanceLabel(pLabel, pBuilder, bTakeOwnership)
-, m_aOwnedToplevel(aOwnedToplevel)
+, JSDialogSender(aOwnedToplevel)
 {
 }
 
 void JSLabel::set_label(const OUString& rText)
 {
 SalInstanceLabel::set_label(rText);
-
-const vcl::ILibreOfficeKitNotifier* pNotifier = 
m_aOwnedToplevel->GetLOKNotifier();
-if (pNotifier)
-{
-std::stringstream aStream;
-boost::property_tree::ptree aTree = 
m_aOwnedToplevel->DumpAsPropertyTree();
-aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
-boost::property_tree::write_json(aStream, aTree);
-const std::string message = aStream.str();
-pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, 
message.c_str());
-}
+notifyDialogState();
 };
+
+JSEntry::JSEntry(VclPtr aOwnedToplevel, ::Edit* pEntry, 
SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership)
+: SalInstanceEntry(pEntry, pBuilder, bTakeOwnership)
+, JSDialogSender(aOwnedToplevel)
+{
+}
+
+void 

[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog

2020-05-19 Thread Szymon Kłos (via logerrit)
 vcl/inc/salvtables.hxx   |2 +-
 vcl/jsdialog/jsdialogbuilder.cxx |2 --
 2 files changed, 1 insertion(+), 3 deletions(-)

New commits:
commit 02b1a8f533d88c90004b1ea294f853f4b73f8c01
Author: Szymon Kłos 
AuthorDate: Tue May 19 10:08:45 2020 +0200
Commit: Szymon Kłos 
CommitDate: Tue May 19 11:26:41 2020 +0200

Fix ambiguous symbol

Change-Id: I62aa1fcbc8dd80bf7ef36a54d3af78248af9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94480
Tested-by: Jenkins
Reviewed-by: Szymon Kłos 

diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index a1cb724f01a1..9aa01bcd81c9 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -668,7 +668,7 @@ protected:
 // owner for ListBox/ComboBox UserData
 std::vector> m_aUserData;
 VclPtr m_xComboBox;
-ScopedVclPtr m_xMenuButton;
+ScopedVclPtr<::MenuButton> m_xMenuButton;
 OUString m_sMenuButtonRow;
 
 public:
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 1d751ea42847..ff85796d3a09 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -5,8 +5,6 @@
 #include 
 #include 
 
-using namespace weld;
-
 JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& 
rUIRoot,
  const OUString& rUIFile)
 : SalInstanceBuilder(dynamic_cast(pParent)
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits