diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-02-07 11:57:21 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-02-07 15:30:15 +0100 |
commit | 91f54b1990153efd17ea5e33feffd1ec16b0387b (patch) | |
tree | 367bc38c21223a91f4089a408b5c8d0ae2254974 | |
parent | 30ab660b07ab9aa72624a728d9e1f963507def7c (diff) |
weld URLBox ItemWindow
Change-Id: I7dad000404a188e2f5588b90d73ea9b1236bd301
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88183
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/svtools/inettbc.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/cctrl/cbnumberformat.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/inc/cbnumberformat.hxx | 2 | ||||
-rw-r--r-- | sd/source/ui/dlg/gluectrl.cxx | 5 | ||||
-rw-r--r-- | sd/source/ui/inc/gluectrl.hxx | 2 | ||||
-rw-r--r-- | sfx2/UIConfig_sfx.mk | 1 | ||||
-rw-r--r-- | sfx2/inc/inettbc.hxx | 13 | ||||
-rw-r--r-- | sfx2/source/inet/inettbc.cxx | 106 | ||||
-rw-r--r-- | sfx2/uiconfig/ui/urlbox.ui | 29 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbunocontroller.cxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/ribbar/workctrl.cxx | 9 |
11 files changed, 146 insertions, 31 deletions
diff --git a/include/svtools/inettbc.hxx b/include/svtools/inettbc.hxx index ac72b4d57bef..8625df7e935d 100644 --- a/include/svtools/inettbc.hxx +++ b/include/svtools/inettbc.hxx @@ -101,6 +101,7 @@ public: void show() { m_xWidget->show(); } void clear() { m_xWidget->clear(); } void connect_entry_activate(const Link<weld::ComboBox&, bool>& rLink) { m_xWidget->connect_entry_activate(rLink); } + void connect_key_press(const Link<const KeyEvent&, bool>& rLink) { m_xWidget->connect_key_press(rLink); } void connect_changed(const Link<weld::ComboBox&, void>& rLink) { aChangeHdl = rLink; } void trigger_changed() { aChangeHdl.Call(*m_xWidget); } void connect_focus_in(const Link<weld::Widget&, void>& rLink) { aFocusInHdl = rLink; } @@ -112,6 +113,7 @@ public: void set_sensitive(bool bSensitive) { m_xWidget->set_sensitive(bSensitive); } void set_help_id(const OString& rHelpId) { m_xWidget->set_help_id(rHelpId); } void select_entry_region(int nStartPos, int nEndPos) { m_xWidget->select_entry_region(nStartPos, nEndPos); } + Size get_preferred_size() const { return m_xWidget->get_preferred_size(); } void EnableAutocomplete(bool bEnable = true) { m_xWidget->set_entry_completion(bEnable); } void SetBaseURL( const OUString& rURL ); diff --git a/sc/source/ui/cctrl/cbnumberformat.cxx b/sc/source/ui/cctrl/cbnumberformat.cxx index 830e24761d08..c02f342333df 100644 --- a/sc/source/ui/cctrl/cbnumberformat.cxx +++ b/sc/source/ui/cctrl/cbnumberformat.cxx @@ -58,6 +58,11 @@ ScNumberFormat::~ScNumberFormat() disposeOnce(); } +void ScNumberFormat::GetFocus() +{ + m_xWidget->grab_focus(); +} + IMPL_STATIC_LINK(ScNumberFormat, NumFormatSelectHdl, weld::ComboBox&, rBox, void) { auto* pCurSh = SfxViewFrame::Current(); diff --git a/sc/source/ui/inc/cbnumberformat.hxx b/sc/source/ui/inc/cbnumberformat.hxx index c2e2f40366bc..7edd3b7fe362 100644 --- a/sc/source/ui/inc/cbnumberformat.hxx +++ b/sc/source/ui/inc/cbnumberformat.hxx @@ -29,6 +29,8 @@ public: virtual void dispose() override; virtual ~ScNumberFormat() override; + virtual void GetFocus() override; + void set_active(int nPos) { m_xWidget->set_active(nPos); } private: diff --git a/sd/source/ui/dlg/gluectrl.cxx b/sd/source/ui/dlg/gluectrl.cxx index 110d945055ee..0364aad81527 100644 --- a/sd/source/ui/dlg/gluectrl.cxx +++ b/sd/source/ui/dlg/gluectrl.cxx @@ -70,6 +70,11 @@ void GlueEscDirLB::dispose() InterimItemWindow::dispose(); } +void GlueEscDirLB::GetFocus() +{ + m_xWidget->grab_focus(); +} + GlueEscDirLB::~GlueEscDirLB() { disposeOnce(); diff --git a/sd/source/ui/inc/gluectrl.hxx b/sd/source/ui/inc/gluectrl.hxx index dcbd0f7fe97f..ebaf5b607d78 100644 --- a/sd/source/ui/inc/gluectrl.hxx +++ b/sd/source/ui/inc/gluectrl.hxx @@ -42,6 +42,8 @@ public: virtual void dispose() override; virtual ~GlueEscDirLB() override; + virtual void GetFocus() override; + void set_active(int nPos) { m_xWidget->set_active(nPos); } void set_sensitive(bool bSensitive); diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk index af7247dd9e6d..15ccbcc24116 100644 --- a/sfx2/UIConfig_sfx.mk +++ b/sfx2/UIConfig_sfx.mk @@ -60,6 +60,7 @@ $(eval $(call gb_UIConfig_add_uifiles,sfx,\ sfx2/uiconfig/ui/templatedlg \ sfx2/uiconfig/ui/saveastemplatedlg \ sfx2/uiconfig/ui/templatecategorydlg \ + sfx2/uiconfig/ui/urlbox \ sfx2/uiconfig/ui/versionsofdialog \ sfx2/uiconfig/ui/versioncommentdialog \ sfx2/uiconfig/ui/versionscmis \ diff --git a/sfx2/inc/inettbc.hxx b/sfx2/inc/inettbc.hxx index 10bbf353fde3..d9c8f52a31c4 100644 --- a/sfx2/inc/inettbc.hxx +++ b/sfx2/inc/inettbc.hxx @@ -23,18 +23,21 @@ #include <rtl/ustring.hxx> #include <sfx2/tbxctrl.hxx> -class ComboBox; -class SvtURLBox; +namespace weld { class ComboBox; }; +class URLBoxItemWindow; +class URLBox; class SfxURLToolBoxControl_Impl final : public SfxToolBoxControl { private: + bool m_bModified; - SvtURLBox* GetURLBox() const; + URLBox* GetURLBox() const; + URLBoxItemWindow* GetURLBoxItemWindow() const; void OpenURL( const OUString& rName ) const; - DECL_LINK( OpenHdl, SvtURLBox*, void ); - DECL_LINK( SelectHdl, ComboBox&, void ); + DECL_LINK(OpenHdl, weld::ComboBox&, bool); + DECL_LINK(SelectHdl, weld::ComboBox&, void); struct ExecuteInfo { diff --git a/sfx2/source/inet/inettbc.cxx b/sfx2/source/inet/inettbc.cxx index c97e9d59bedf..283f0668cebd 100644 --- a/sfx2/source/inet/inettbc.cxx +++ b/sfx2/source/inet/inettbc.cxx @@ -34,6 +34,7 @@ #include <svtools/inettbc.hxx> +#include <sfx2/InterimItemWindow.hxx> #include <sfx2/sfxsids.hrc> using namespace ::com::sun::star::uno; @@ -50,6 +51,7 @@ SFX_IMPL_TOOLBOX_CONTROL(SfxURLToolBoxControl_Impl,SfxStringItem) SfxURLToolBoxControl_Impl::SfxURLToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ) : SfxToolBoxControl( nSlotId, nId, rBox ) + , m_bModified(false) { addStatusListener( ".uno:CurrentURL"); } @@ -58,11 +60,64 @@ SfxURLToolBoxControl_Impl::~SfxURLToolBoxControl_Impl() { } -SvtURLBox* SfxURLToolBoxControl_Impl::GetURLBox() const +class URLBoxItemWindow final : public InterimItemWindow { - return static_cast<SvtURLBox*>(GetToolBox().GetItemWindow( GetId() )); +private: + std::unique_ptr<URLBox> m_xWidget; + + DECL_LINK(KeyInputHdl, const KeyEvent&, bool); +public: + URLBoxItemWindow(vcl::Window* pParent) + : InterimItemWindow(pParent, "sfx/ui/urlbox.ui", "URLBox") + , m_xWidget(new URLBox(m_xBuilder->weld_combo_box("urlbox"))) + { + m_xWidget->connect_key_press(LINK(this, URLBoxItemWindow, KeyInputHdl)); + + SetSizePixel(m_xWidget->get_preferred_size()); + } + + URLBox* GetURLBox() + { + return m_xWidget.get(); + } + + virtual void dispose() override + { + m_xWidget.reset(); + InterimItemWindow::dispose(); + } + + virtual void GetFocus() override + { + m_xWidget->grab_focus(); + } + + void set_sensitive(bool bSensitive) + { + Enable(bSensitive); + m_xWidget->set_sensitive(bSensitive); + } + + virtual ~URLBoxItemWindow() override + { + disposeOnce(); + } +}; + +IMPL_LINK(URLBoxItemWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool) +{ + return ChildKeyInput(rKEvt); +} + +URLBoxItemWindow* SfxURLToolBoxControl_Impl::GetURLBoxItemWindow() const +{ + return static_cast<URLBoxItemWindow*>(GetToolBox().GetItemWindow(GetId())); } +URLBox* SfxURLToolBoxControl_Impl::GetURLBox() const +{ + return GetURLBoxItemWindow()->GetURLBox(); +} void SfxURLToolBoxControl_Impl::OpenURL( const OUString& rName ) const { @@ -132,27 +187,29 @@ IMPL_STATIC_LINK( SfxURLToolBoxControl_Impl, ExecuteHdl_Impl, void*, p, void ) delete pExecuteInfo; } - VclPtr<vcl::Window> SfxURLToolBoxControl_Impl::CreateItemWindow( vcl::Window* pParent ) { - VclPtrInstance<SvtURLBox> pURLBox( pParent ); - pURLBox->SetOpenHdl( LINK( this, SfxURLToolBoxControl_Impl, OpenHdl ) ); - pURLBox->SetSelectHdl( LINK( this, SfxURLToolBoxControl_Impl, SelectHdl ) ); - return pURLBox.get(); + VclPtrInstance<URLBoxItemWindow> xURLBox(pParent); + URLBox* pURLBox = xURLBox->GetURLBox(); + pURLBox->connect_changed(LINK(this, SfxURLToolBoxControl_Impl, SelectHdl)); + pURLBox->connect_entry_activate(LINK(this, SfxURLToolBoxControl_Impl, OpenHdl)); + return xURLBox; } -IMPL_LINK_NOARG(SfxURLToolBoxControl_Impl, SelectHdl, ComboBox&, void) +IMPL_LINK(SfxURLToolBoxControl_Impl, SelectHdl, weld::ComboBox&, rComboBox, void) { - SvtURLBox* pURLBox = GetURLBox(); + m_bModified = true; + + URLBox* pURLBox = GetURLBox(); OUString aName( pURLBox->GetURL() ); - if ( !pURLBox->IsTravelSelect() && !aName.isEmpty() ) + if (rComboBox.changed_by_menu() && !aName.isEmpty()) OpenURL( aName ); } -IMPL_LINK_NOARG(SfxURLToolBoxControl_Impl, OpenHdl, SvtURLBox*, void) +IMPL_LINK_NOARG(SfxURLToolBoxControl_Impl, OpenHdl, weld::ComboBox&, bool) { - SvtURLBox* pURLBox = GetURLBox(); + URLBox* pURLBox = GetURLBox(); OpenURL( pURLBox->GetURL() ); Reference< XDesktop2 > xDesktop = Desktop::create( m_xContext ); @@ -166,8 +223,9 @@ IMPL_LINK_NOARG(SfxURLToolBoxControl_Impl, OpenHdl, SvtURLBox*, void) pWin->ToTop( ToTopFlags::RestoreWhenMin ); } } -} + return true; +} void SfxURLToolBoxControl_Impl::StateChanged ( @@ -179,21 +237,21 @@ void SfxURLToolBoxControl_Impl::StateChanged if ( nSID == SID_OPENURL ) { // Disable URL box if command is disabled - GetURLBox()->Enable( SfxItemState::DISABLED != eState ); + GetURLBoxItemWindow()->set_sensitive( SfxItemState::DISABLED != eState ); } - if ( !GetURLBox()->IsEnabled() ) + if ( !GetURLBoxItemWindow()->IsEnabled() ) return; if( nSID == SID_FOCUSURLBOX ) { - if ( GetURLBox()->IsVisible() ) - GetURLBox()->GrabFocus(); + if ( GetURLBoxItemWindow()->IsVisible() ) + GetURLBoxItemWindow()->GrabFocus(); } - else if ( !GetURLBox()->IsModified() && SfxItemState::DEFAULT == eState ) + else if ( !m_bModified && SfxItemState::DEFAULT == eState ) { - SvtURLBox* pURLBox = GetURLBox(); - pURLBox->Clear(); + URLBox* pURLBox = GetURLBox(); + pURLBox->clear(); const css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > lList = SvtHistoryOptions().GetList(ePICKLIST); for (const css::uno::Sequence< css::beans::PropertyValue >& lProps : lList) @@ -212,9 +270,9 @@ void SfxURLToolBoxControl_Impl::StateChanged OUString sFile; if (osl::FileBase::getSystemPathFromFileURL(sMainURL, sFile) == osl::FileBase::E_None) - pURLBox->InsertEntry(sFile); + pURLBox->append_text(sFile); else - pURLBox->InsertEntry(sMainURL); + pURLBox->append_text(sMainURL); } } @@ -224,10 +282,10 @@ void SfxURLToolBoxControl_Impl::StateChanged INetProtocol eProt = aURL.GetProtocol(); if ( eProt == INetProtocol::File ) { - pURLBox->SetText( aURL.PathToFileName() ); + pURLBox->set_entry_text( aURL.PathToFileName() ); } else - pURLBox->SetText( aURL.GetURLNoPass() ); + pURLBox->set_entry_text( aURL.GetURLNoPass() ); } } diff --git a/sfx2/uiconfig/ui/urlbox.ui b/sfx2/uiconfig/ui/urlbox.ui new file mode 100644 index 000000000000..75079a12149c --- /dev/null +++ b/sfx2/uiconfig/ui/urlbox.ui @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> +<interface domain="sfx"> + <requires lib="gtk+" version="3.18"/> + <object class="GtkBox" id="URLBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkComboBoxText" id="urlbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="has_entry">True</property> + <child internal-child="entry"> + <object class="GtkEntry"> + <property name="can_focus">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> +</interface> diff --git a/svx/source/tbxctrls/tbunocontroller.cxx b/svx/source/tbxctrls/tbunocontroller.cxx index fc56a7d0e286..81c4b8e7bd73 100644 --- a/svx/source/tbxctrls/tbunocontroller.cxx +++ b/svx/source/tbxctrls/tbunocontroller.cxx @@ -86,7 +86,7 @@ class FontHeightToolBoxControl : public svt::ToolboxController, css::awt::FontDescriptor m_aCurrentFont; }; -class SvxFontSizeBox_Impl : public InterimItemWindow +class SvxFontSizeBox_Impl final : public InterimItemWindow { public: SvxFontSizeBox_Impl( vcl::Window* pParent, @@ -101,7 +101,6 @@ public: virtual boost::property_tree::ptree DumpAsPropertyTree() override; -protected: virtual void DataChanged( const DataChangedEvent& rDCEvt ) override; virtual void GetFocus() override; diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx index 4a466ea722b5..70e5d4f73137 100644 --- a/sw/source/uibase/ribbar/workctrl.cxx +++ b/sw/source/uibase/ribbar/workctrl.cxx @@ -558,6 +558,11 @@ public: InterimItemWindow::dispose(); } + virtual void GetFocus() override + { + m_xWidget->grab_focus(); + } + void save_value() { m_xWidget->save_value(); @@ -761,6 +766,10 @@ public: m_xWidget.reset(); InterimItemWindow::dispose(); } + virtual void GetFocus() override + { + m_xWidget->grab_focus(); + } virtual ~SwJumpToSpecificBox_Impl() override { disposeOnce(); |