core.git: vcl/inc vcl/jsdialog
vcl/inc/jsdialog/jsdialogbuilder.hxx |2 ++ vcl/jsdialog/jsdialogbuilder.cxx |8 +++- 2 files changed, 9 insertions(+), 1 deletion(-) New commits: commit 79b1a61303af8dc8716c03151b28bfce13162eb0 Author: Tomaž Vajngerl AuthorDate: Wed May 1 18:52:03 2024 +0900 Commit: Tomaž Vajngerl CommitDate: Thu May 2 07:47:49 2024 +0200 jsdialog: fix updating on container "reorder_child" or "move" The accessibility checker sidebar did not update properly when new issues were added or were removed. The accessiblity checker is adding and removing new widget parts (one for each new issues) to the grids, which is using "reorder_child" and "move" methods. If we call "reorder_child" with update, it fails in online as it doesn't find the parent "box" ("box_document" for example) because the id is not set properly. Doing a full update on "reorder_child" fixes the updating problem. Change-Id: Ia3032516a7cee0271f8b05b22e13dde2b7430e66 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166962 Reviewed-by: Tomaž Vajngerl Tested-by: Jenkins diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 2c544146dfad..7491582e1550 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -544,6 +544,8 @@ class JSContainer final : public JSWidget public: JSContainer(JSDialogSender* pSender, vcl::Window* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership); + +void move(weld::Widget* pWidget, weld::Container* pNewParent) override; }; class JSScrolledWindow final : public JSWidget diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index fa574088c7c6..cb9378f471f8 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1475,6 +1475,12 @@ JSContainer::JSContainer(JSDialogSender* pSender, vcl::Window* pContainer, { } +void JSContainer::move(weld::Widget* pWidget, weld::Container* pNewParent) +{ +SalInstanceContainer::move(pWidget, pNewParent); +sendFullUpdate(); +} + JSScrolledWindow::JSScrolledWindow(JSDialogSender* pSender, ::VclScrolledWindow* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership, bool bUserManagedScrolling) @@ -2340,7 +2346,7 @@ JSBox::JSBox(JSDialogSender* pSender, VclBox* pBox, SalInstanceBuilder* pBuilder void JSBox::reorder_child(weld::Widget* pWidget, int nNewPosition) { SalInstanceBox::reorder_child(pWidget, nNewPosition); -sendUpdate(); +sendFullUpdate(); } JSImage::JSImage(JSDialogSender* pSender, FixedImage* pImage, SalInstanceBuilder* pBuilder,
core.git: vcl/inc vcl/jsdialog
vcl/inc/jsdialog/jsdialogbuilder.hxx |1 + vcl/jsdialog/jsdialogbuilder.cxx |6 ++ 2 files changed, 7 insertions(+) New commits: commit d94288a6f26a6f0d58901732c562dfad861ec4c5 Author: Jaume Pujantell AuthorDate: Mon Mar 18 15:40:20 2024 +0100 Commit: Miklos Vajna CommitDate: Wed Mar 20 15:41:08 2024 +0100 jsdialog: send update on spin button range change On Online, on the Table Properties dialog, when changing mesures from absolute to relative, the browser whould complain about values being out range since it still expected absolute values. Change-Id: I2a3ae844b4f4f874ea2140dec313794a87d9f2cd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164973 Tested-by: Jenkins CollaboraOffice Reviewed-by: Miklos Vajna (cherry picked from commit c3227d33ef18f090d858e93e9dc516db25995ebe) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164998 Tested-by: Jenkins diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 315b8605582f..34fdb7a068d5 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -659,6 +659,7 @@ public: bool bTakeOwnership); virtual void set_value(sal_Int64 value) override; +virtual void set_range(sal_Int64 min, sal_Int64 max) override; }; class JSFormattedSpinButton final diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 08a3f53b6059..1f56bda71bba 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1746,6 +1746,12 @@ void JSSpinButton::set_value(sal_Int64 value) sendAction(std::move(pMap)); } +void JSSpinButton::set_range(sal_Int64 min, sal_Int64 max) +{ +SalInstanceSpinButton::set_range(min, max); +sendUpdate(); +} + JSFormattedSpinButton::JSFormattedSpinButton(JSDialogSender* pSender, ::FormattedField* pSpin, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget(pSender, pSpin, pBuilder,
core.git: vcl/inc vcl/jsdialog
vcl/inc/jsdialog/jsdialogbuilder.hxx | 19 ++-- vcl/jsdialog/jsdialogbuilder.cxx | 156 --- 2 files changed, 81 insertions(+), 94 deletions(-) New commits: commit 81d4f14e5968453b72ba754a7b3e6c13a30abbf4 Author: Noel Grandin AuthorDate: Mon Mar 4 19:15:43 2024 +0200 Commit: Noel Grandin CommitDate: Tue Mar 5 07:21:51 2024 +0100 reduce heap allocation in JSDialogNotifyIdle makes the code simpler too Change-Id: Ic452895a20fb2908f7383082069a84ef3fa6a4d1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164395 Tested-by: Jenkins Reviewed-by: Noel Grandin diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index e24ff1589655..315b8605582f 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -125,16 +125,15 @@ public: std::unique_ptr pData = nullptr); private: -void send(tools::JsonWriter& aJsonWriter); -std::unique_ptr generateFullUpdate() const; -std::unique_ptr generateWidgetUpdate(VclPtr pWindow) const; -std::unique_ptr generateCloseMessage() const; -std::unique_ptr -generateActionMessage(VclPtr pWindow, - std::unique_ptr pData) const; -std::unique_ptr -generatePopupMessage(VclPtr pWindow, OUString sParentId, OUString sCloseId) const; -std::unique_ptr generateClosePopupMessage(OUString sWindowId) const; +void send(const OString& sMsg); +OString generateFullUpdate() const; +OString generateWidgetUpdate(VclPtr pWindow) const; +OString generateCloseMessage() const; +OString generateActionMessage(VclPtr pWindow, + std::unique_ptr pData) const; +OString generatePopupMessage(VclPtr pWindow, OUString sParentId, + OUString sCloseId) const; +OString generateClosePopupMessage(OUString sWindowId) const; }; class JSDialogSender diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index a7199e2ed960..38b3a9e2922d 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -81,31 +81,22 @@ JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr aNotifierWindow, void JSDialogNotifyIdle::forceUpdate() { m_bForce = true; } -void JSDialogNotifyIdle::send(tools::JsonWriter& aJsonWriter) +void JSDialogNotifyIdle::send(const OString& sMsg) { if (!m_aNotifierWindow) { -aJsonWriter.finishAndGetAsOString(); return; } const vcl::ILibreOfficeKitNotifier* pNotifier = m_aNotifierWindow->GetLOKNotifier(); if (pNotifier) { -if (m_bForce || !aJsonWriter.isDataEquals(m_LastNotificationMessage)) +if (m_bForce || sMsg != m_LastNotificationMessage) { m_bForce = false; -m_LastNotificationMessage = aJsonWriter.finishAndGetAsOString(); +m_LastNotificationMessage = sMsg; pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, m_LastNotificationMessage); } -else -{ -aJsonWriter.finishAndGetAsOString(); -} -} -else -{ -aJsonWriter.finishAndGetAsOString(); } } @@ -139,91 +130,89 @@ void JSDialogNotifyIdle::sendMessage(jsdialog::MessageType eType, m_aMessageQueue.push_back(aMessage); } -std::unique_ptr JSDialogNotifyIdle::generateFullUpdate() const +OString JSDialogNotifyIdle::generateFullUpdate() const { -std::unique_ptr aJsonWriter(new tools::JsonWriter()); - if (!m_aContentWindow || !m_aNotifierWindow) -return aJsonWriter; +return OString(); -m_aContentWindow->DumpAsPropertyTree(*aJsonWriter); +tools::JsonWriter aJsonWriter; + +m_aContentWindow->DumpAsPropertyTree(aJsonWriter); if (m_aNotifierWindow) -aJsonWriter->put("id", m_aNotifierWindow->GetLOKWindowId()); -aJsonWriter->put("jsontype", m_sTypeOfJSON); +aJsonWriter.put("id", m_aNotifierWindow->GetLOKWindowId()); +aJsonWriter.put("jsontype", m_sTypeOfJSON); -return aJsonWriter; +return aJsonWriter.finishAndGetAsOString(); } -std::unique_ptr -JSDialogNotifyIdle::generateWidgetUpdate(VclPtr pWindow) const +OString JSDialogNotifyIdle::generateWidgetUpdate(VclPtr pWindow) const { -std::unique_ptr aJsonWriter(new tools::JsonWriter()); - if (!pWindow || !m_aNotifierWindow) -return aJsonWriter; +return OString(); -aJsonWriter->put("jsontype", m_sTypeOfJSON); -aJsonWriter->put("action", "update"); +tools::JsonWriter aJsonWriter; + +aJsonWriter.put("jsontype", m_sTypeOfJSON); +aJsonWriter.put("action", "update"); if (m_aNotifierWindow) -aJsonWriter->put("id", m_aNotifierWindow->GetLOKWindowId()); +aJsonWriter.put("id", m_aNotifierWindow->GetLOKWindowId()); { -auto aEntries = aJsonWriter->startNode("control"); -
[Libreoffice-commits] core.git: vcl/inc vcl/jsdialog vcl/source
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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