include/vcl/jsdialog/executor.hxx | 2 include/vcl/weld.hxx | 2 vcl/inc/jsdialog/jsdialogbuilder.hxx | 12 + vcl/inc/salvtables.hxx | 57 +++++++ vcl/jsdialog/executor.cxx | 11 + vcl/jsdialog/jsdialogbuilder.cxx | 29 ++++ vcl/source/app/salvtables.cxx | 252 ++++++++++++++++------------------- 7 files changed, 231 insertions(+), 134 deletions(-)
New commits: commit 10775fb4006dcdf3ce5b01179b4d9a6f009d8592 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Jul 2 14:44:24 2020 +0200 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Thu Jul 16 13:24:59 2020 +0200 jsdialog: weld text view Change-Id: Ia3bae7a8b812e791fc6a8888e63adca17b8910d4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98883 Tested-by: Jenkins Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index d988f5460a08..1cfa24c28a8a 100644 --- a/include/vcl/jsdialog/executor.hxx +++ b/include/vcl/jsdialog/executor.hxx @@ -16,6 +16,8 @@ class LOKTrigger { public: + static void trigger_changed(weld::TextView& rView) { rView.signal_changed(); } + static void trigger_changed(weld::Entry& rEdit) { rEdit.signal_changed(); } static void trigger_changed(weld::ComboBox& rComboBox) { rComboBox.signal_changed(); } diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 7bd54920a0bc..7d29e1c7f605 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1937,6 +1937,8 @@ public: class VCL_DLLPUBLIC TextView : virtual public Container { + friend class ::LOKTrigger; + private: OUString m_sSavedValue; diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 1622cc0f6ade..c9673e778c16 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -21,6 +21,8 @@ class ToolBox; class ComboBox; +class VclMultiLineEdit; + typedef std::map<OString, weld::Widget*> WidgetMap; class JSDialogNotifyIdle : public Idle @@ -92,6 +94,8 @@ public: bool bTakeOwnership = false) override; std::unique_ptr<weld::Toolbar> weld_toolbar(const OString& id, bool bTakeOwnership = false) override; + std::unique_ptr<weld::TextView> weld_text_view(const OString& id, + bool bTakeOwnership = false) override; static weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, @@ -249,4 +253,12 @@ public: virtual void signal_clicked(const OString& rIdent) override; }; +class JSTextView : public JSWidget<SalInstanceTextView, ::VclMultiLineEdit> +{ +public: + JSTextView(VclPtr<vcl::Window> aOwnedToplevel, ::VclMultiLineEdit* pTextView, + SalInstanceBuilder* pBuilder, bool bTakeOwnership); + virtual void set_text(const OUString& rText) 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 1df6af10c9c6..53fded14e1c1 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -131,6 +131,17 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& rWidget, StringMap& rDat return true; } } + + auto pTextView = dynamic_cast<weld::TextView*>(pWidget); + if (pTextView) + { + if (sAction == "change") + { + pTextView->set_text(rData["data"]); + LOKTrigger::trigger_changed(*pTextView); + return true; + } + } } } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index e3245a40a73b..33a7b8c3c992 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -20,6 +20,7 @@ #include <o3tl/deleter.hxx> #include <memory> #include <vcl/toolbox.hxx> +#include <vcl/vclmedit.hxx> JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr<vcl::Window> aWindow) : Idle("JSDialog notify") @@ -331,6 +332,21 @@ std::unique_ptr<weld::Toolbar> JSInstanceBuilder::weld_toolbar(const OString& id return pWeldWidget; } +std::unique_ptr<weld::TextView> JSInstanceBuilder::weld_text_view(const OString& id, + bool bTakeOwnership) +{ + VclMultiLineEdit* pTextView = m_xBuilder->get<VclMultiLineEdit>(id); + auto pWeldWidget = pTextView ? std::make_unique<JSTextView>( + m_bHasTopLevelDialog ? m_aOwnedToplevel : m_aParentDialog, + pTextView, this, bTakeOwnership) + : nullptr; + + if (pWeldWidget) + RememberWidget(id, pWeldWidget.get()); + + return pWeldWidget; +} + weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonType, @@ -570,4 +586,17 @@ void JSToolbar::signal_clicked(const OString& rIdent) notifyDialogState(); } +JSTextView::JSTextView(VclPtr<vcl::Window> aOwnedToplevel, ::VclMultiLineEdit* pTextView, + SalInstanceBuilder* pBuilder, bool bTakeOwnership) + : JSWidget<SalInstanceTextView, ::VclMultiLineEdit>(aOwnedToplevel, pTextView, pBuilder, + bTakeOwnership) +{ +} + +void JSTextView::set_text(const OUString& rText) +{ + SalInstanceTextView::set_text(rText); + notifyDialogState(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ commit b1b95b80b54819ced62443d3c87ec6ced27f81a9 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Jul 16 11:06:49 2020 +0200 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Thu Jul 16 13:24:53 2020 +0200 Move SalInstanceTextView dect to header file Change-Id: I779f860fec5203db3493663ff61d7b06167ff685 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98882 Tested-by: Jenkins Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index d5061b3e066c..cd82c840694f 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1243,4 +1243,61 @@ public: virtual ~SalInstanceToolbar() override; }; +class SalInstanceTextView : public SalInstanceContainer, public virtual weld::TextView +{ +private: + VclPtr<VclMultiLineEdit> m_xTextView; + Link<ScrollBar*, void> m_aOrigVScrollHdl; + + DECL_LINK(ChangeHdl, Edit&, void); + DECL_LINK(VscrollHdl, ScrollBar*, void); + DECL_LINK(CursorListener, VclWindowEvent&, void); + +public: + SalInstanceTextView(VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder, + bool bTakeOwnership); + + virtual void set_text(const OUString& rText) override; + + virtual void replace_selection(const OUString& rText) override; + + virtual OUString get_text() const override; + + bool get_selection_bounds(int& rStartPos, int& rEndPos) override; + + virtual void select_region(int nStartPos, int nEndPos) override; + + virtual void set_editable(bool bEditable) override; + virtual bool get_editable() const override; + virtual void set_max_length(int nChars) override; + + virtual void set_monospace(bool bMonospace) override; + + virtual void connect_cursor_position(const Link<TextView&, void>& rLink) override; + + virtual bool can_move_cursor_with_up() const override; + + virtual bool can_move_cursor_with_down() const override; + + virtual void cut_clipboard() override; + + virtual void copy_clipboard() override; + + virtual void paste_clipboard() override; + + virtual void set_alignment(TxtAlign eXAlign) override; + + virtual int vadjustment_get_value() const override; + + virtual void vadjustment_set_value(int value) override; + + virtual int vadjustment_get_upper() const override; + + virtual int vadjustment_get_lower() const override; + + virtual int vadjustment_get_page_size() const override; + + virtual ~SalInstanceTextView() override; +}; + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 74436a1644e9..3581b14a8afb 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -5448,164 +5448,148 @@ std::unique_ptr<weld::Label> SalInstanceFrame::weld_label_widget() const return std::make_unique<SalInstanceLabel>(pLabel, m_pBuilder, false); } -namespace -{ -class SalInstanceTextView : public SalInstanceContainer, public virtual weld::TextView +SalInstanceTextView::SalInstanceTextView(VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder, + bool bTakeOwnership) + : SalInstanceContainer(pTextView, pBuilder, bTakeOwnership) + , m_xTextView(pTextView) { -private: - VclPtr<VclMultiLineEdit> m_xTextView; - Link<ScrollBar*, void> m_aOrigVScrollHdl; - - DECL_LINK(ChangeHdl, Edit&, void); - DECL_LINK(VscrollHdl, ScrollBar*, void); - DECL_LINK(CursorListener, VclWindowEvent&, void); + m_xTextView->SetModifyHdl(LINK(this, SalInstanceTextView, ChangeHdl)); + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + m_aOrigVScrollHdl = rVertScrollBar.GetScrollHdl(); + rVertScrollBar.SetScrollHdl(LINK(this, SalInstanceTextView, VscrollHdl)); +} -public: - SalInstanceTextView(VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder, - bool bTakeOwnership) - : SalInstanceContainer(pTextView, pBuilder, bTakeOwnership) - , m_xTextView(pTextView) - { - m_xTextView->SetModifyHdl(LINK(this, SalInstanceTextView, ChangeHdl)); - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - m_aOrigVScrollHdl = rVertScrollBar.GetScrollHdl(); - rVertScrollBar.SetScrollHdl(LINK(this, SalInstanceTextView, VscrollHdl)); - } +void SalInstanceTextView::set_text(const OUString& rText) +{ + disable_notify_events(); + m_xTextView->SetText(rText); + enable_notify_events(); +} - virtual void set_text(const OUString& rText) override - { - disable_notify_events(); - m_xTextView->SetText(rText); - enable_notify_events(); - } +void SalInstanceTextView::replace_selection(const OUString& rText) +{ + disable_notify_events(); + m_xTextView->ReplaceSelected(rText); + enable_notify_events(); +} - virtual void replace_selection(const OUString& rText) override - { - disable_notify_events(); - m_xTextView->ReplaceSelected(rText); - enable_notify_events(); - } +OUString SalInstanceTextView::get_text() const { return m_xTextView->GetText(); } - virtual OUString get_text() const override { return m_xTextView->GetText(); } +bool SalInstanceTextView::get_selection_bounds(int& rStartPos, int& rEndPos) +{ + const Selection& rSelection = m_xTextView->GetSelection(); + rStartPos = rSelection.Min(); + rEndPos = rSelection.Max(); + return rSelection.Len(); +} - bool get_selection_bounds(int& rStartPos, int& rEndPos) override - { - const Selection& rSelection = m_xTextView->GetSelection(); - rStartPos = rSelection.Min(); - rEndPos = rSelection.Max(); - return rSelection.Len(); - } +void SalInstanceTextView::select_region(int nStartPos, int nEndPos) +{ + disable_notify_events(); + long nStart = nStartPos < 0 ? SELECTION_MAX : nStartPos; + long nEnd = nEndPos < 0 ? SELECTION_MAX : nEndPos; + m_xTextView->SetSelection(Selection(nStart, nEnd)); + enable_notify_events(); +} - virtual void select_region(int nStartPos, int nEndPos) override - { - disable_notify_events(); - long nStart = nStartPos < 0 ? SELECTION_MAX : nStartPos; - long nEnd = nEndPos < 0 ? SELECTION_MAX : nEndPos; - m_xTextView->SetSelection(Selection(nStart, nEnd)); - enable_notify_events(); - } +void SalInstanceTextView::set_editable(bool bEditable) { m_xTextView->SetReadOnly(!bEditable); } +bool SalInstanceTextView::get_editable() const { return !m_xTextView->IsReadOnly(); } +void SalInstanceTextView::set_max_length(int nChars) { m_xTextView->SetMaxTextLen(nChars); } - virtual void set_editable(bool bEditable) override { m_xTextView->SetReadOnly(!bEditable); } - virtual bool get_editable() const override { return !m_xTextView->IsReadOnly(); } - virtual void set_max_length(int nChars) override { m_xTextView->SetMaxTextLen(nChars); } +void SalInstanceTextView::set_monospace(bool bMonospace) +{ + vcl::Font aOrigFont = m_xTextView->GetControlFont(); + vcl::Font aFont; + if (bMonospace) + aFont = OutputDevice::GetDefaultFont(DefaultFontType::UI_FIXED, LANGUAGE_DONTKNOW, + GetDefaultFontFlags::OnlyOne, m_xTextView); + else + aFont = Application::GetSettings().GetStyleSettings().GetFieldFont(); + aFont.SetFontHeight(aOrigFont.GetFontHeight()); + m_xTextView->SetFont(aFont); + m_xTextView->SetControlFont(aFont); +} - virtual void set_monospace(bool bMonospace) override - { - vcl::Font aOrigFont = m_xTextView->GetControlFont(); - vcl::Font aFont; - if (bMonospace) - aFont = OutputDevice::GetDefaultFont(DefaultFontType::UI_FIXED, LANGUAGE_DONTKNOW, - GetDefaultFontFlags::OnlyOne, m_xTextView); - else - aFont = Application::GetSettings().GetStyleSettings().GetFieldFont(); - aFont.SetFontHeight(aOrigFont.GetFontHeight()); - m_xTextView->SetFont(aFont); - m_xTextView->SetControlFont(aFont); - } +void SalInstanceTextView::connect_cursor_position(const Link<TextView&, void>& rLink) +{ + assert(!m_aCursorPositionHdl.IsSet()); + m_xTextView->AddEventListener(LINK(this, SalInstanceTextView, CursorListener)); + weld::TextView::connect_cursor_position(rLink); +} - virtual void connect_cursor_position(const Link<TextView&, void>& rLink) override - { - assert(!m_aCursorPositionHdl.IsSet()); - m_xTextView->AddEventListener(LINK(this, SalInstanceTextView, CursorListener)); - weld::TextView::connect_cursor_position(rLink); - } +bool SalInstanceTextView::can_move_cursor_with_up() const +{ + bool bNoSelection = !m_xTextView->GetSelection(); + return !bNoSelection || m_xTextView->CanUp(); +} - virtual bool can_move_cursor_with_up() const override - { - bool bNoSelection = !m_xTextView->GetSelection(); - return !bNoSelection || m_xTextView->CanUp(); - } +bool SalInstanceTextView::can_move_cursor_with_down() const +{ + bool bNoSelection = !m_xTextView->GetSelection(); + return !bNoSelection || m_xTextView->CanDown(); +} - virtual bool can_move_cursor_with_down() const override - { - bool bNoSelection = !m_xTextView->GetSelection(); - return !bNoSelection || m_xTextView->CanDown(); - } +void SalInstanceTextView::cut_clipboard() +{ + m_xTextView->Cut(); +} - virtual void cut_clipboard() override - { - m_xTextView->Cut(); - } +void SalInstanceTextView::copy_clipboard() +{ + m_xTextView->Copy(); +} - virtual void copy_clipboard() override - { - m_xTextView->Copy(); - } +void SalInstanceTextView::paste_clipboard() +{ + m_xTextView->Paste(); +} - virtual void paste_clipboard() override - { - m_xTextView->Paste(); - } +void SalInstanceTextView::set_alignment(TxtAlign eXAlign) +{ + ::set_alignment(*m_xTextView, eXAlign); +} - virtual void set_alignment(TxtAlign eXAlign) override - { - ::set_alignment(*m_xTextView, eXAlign); - } +int SalInstanceTextView::vadjustment_get_value() const +{ + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + return rVertScrollBar.GetThumbPos(); +} - virtual int vadjustment_get_value() const override - { - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - return rVertScrollBar.GetThumbPos(); - } +void SalInstanceTextView::vadjustment_set_value(int value) +{ + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + rVertScrollBar.SetThumbPos(value); + m_aOrigVScrollHdl.Call(&rVertScrollBar); +} - virtual void vadjustment_set_value(int value) override - { - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - rVertScrollBar.SetThumbPos(value); - m_aOrigVScrollHdl.Call(&rVertScrollBar); - } +int SalInstanceTextView::vadjustment_get_upper() const +{ + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + return rVertScrollBar.GetRangeMax(); +} - virtual int vadjustment_get_upper() const override - { - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - return rVertScrollBar.GetRangeMax(); - } +int SalInstanceTextView::vadjustment_get_lower() const +{ + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + return rVertScrollBar.GetRangeMin(); +} - virtual int vadjustment_get_lower() const override - { - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - return rVertScrollBar.GetRangeMin(); - } +int SalInstanceTextView::vadjustment_get_page_size() const +{ + ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); + return rVertScrollBar.GetVisibleSize(); +} - virtual int vadjustment_get_page_size() const override +SalInstanceTextView::~SalInstanceTextView() +{ + if (!m_xTextView->IsDisposed()) { + if (m_aCursorPositionHdl.IsSet()) + m_xTextView->RemoveEventListener(LINK(this, SalInstanceTextView, CursorListener)); + m_xTextView->SetModifyHdl(Link<Edit&, void>()); ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - return rVertScrollBar.GetVisibleSize(); - } - - virtual ~SalInstanceTextView() override - { - if (!m_xTextView->IsDisposed()) - { - if (m_aCursorPositionHdl.IsSet()) - m_xTextView->RemoveEventListener(LINK(this, SalInstanceTextView, CursorListener)); - m_xTextView->SetModifyHdl(Link<Edit&, void>()); - ScrollBar& rVertScrollBar = m_xTextView->GetVScrollBar(); - rVertScrollBar.SetScrollHdl(m_aOrigVScrollHdl); - } + rVertScrollBar.SetScrollHdl(m_aOrigVScrollHdl); } -}; - } IMPL_LINK(SalInstanceTextView, VscrollHdl, ScrollBar*, pScrollBar, void) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits