diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-11-01 13:49:09 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-11-02 15:54:40 +0100 |
commit | b461740a9ca89eb3b036c366ba60f24c7aad2b60 (patch) | |
tree | 073f7b021ed770d2569982e62d75dba201a4a6a9 /vcl | |
parent | 47c88b2c4db23f33a4371139745b8427564d3667 (diff) |
weld SfxRecordingFloat_Impl utility window
we can't abuse action_name anymore as the uno command
are not legal actions
Change-Id: Iaf9306c6e3eec852d2a50df9161bd20383881a04
Reviewed-on: https://gerrit.libreoffice.org/81902
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/salvtables.cxx | 30 | ||||
-rw-r--r-- | vcl/source/app/weldutils.cxx | 31 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 11 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 74 |
4 files changed, 140 insertions, 6 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index c2701e4525ee..2a1c38d3a3ad 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1025,6 +1025,36 @@ public: m_xToolBox->InsertSeparator(nInsertPos, 5); } + virtual int get_n_items() const override + { + return m_xToolBox->GetItemCount(); + } + + virtual OString get_item_ident(int nIndex) const override + { + return m_xToolBox->GetItemCommand(m_xToolBox->GetItemId(nIndex)).toUtf8(); + } + + virtual void set_item_label(int nIndex, const OUString& rLabel) override + { + m_xToolBox->SetItemText(m_xToolBox->GetItemId(nIndex), rLabel); + } + + virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + { + m_xToolBox->SetItemImage(m_xToolBox->GetItemId(nIndex), Image(rIcon)); + } + + virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override + { + m_xToolBox->SetQuickHelpText(m_xToolBox->GetItemId(nIndex), rTip); + } + + virtual vcl::ImageType get_icon_size() const override + { + return m_xToolBox->GetImageSize(); + } + virtual ~SalInstanceToolbar() override { m_xToolBox->SetDropdownClickHdl(Link<ToolBox*, void>()); diff --git a/vcl/source/app/weldutils.cxx b/vcl/source/app/weldutils.cxx index 9db82c27dda0..9e20d7f69a0d 100644 --- a/vcl/source/app/weldutils.cxx +++ b/vcl/source/app/weldutils.cxx @@ -7,8 +7,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <comphelper/dispatchcommand.hxx> #include <vcl/builderpage.hxx> +#include <vcl/commandinfoprovider.hxx> #include <vcl/svapp.hxx> +#include <vcl/weldutils.hxx> BuilderPage::BuilderPage(weld::Widget* pParent, weld::DialogController* pController, const OUString& rUIXMLDescription, const OString& rID) @@ -102,6 +105,34 @@ void TriStateEnabled::ButtonToggled(weld::ToggleButton& rToggle) } eState = rToggle.get_state(); } + +ToolbarUnoDispatcher::ToolbarUnoDispatcher(Toolbar& rToolbar, + const css::uno::Reference<css::frame::XFrame>& rFrame) + : m_xFrame(rFrame) +{ + OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame)); + vcl::ImageType eSize = rToolbar.get_icon_size(); + + for (int i = 0, nItems = rToolbar.get_n_items(); i < nItems; ++i) + { + OUString sCommand = OUString::fromUtf8(rToolbar.get_item_ident(i)); + + OUString aLabel(vcl::CommandInfoProvider::GetLabelForCommand(sCommand, aModuleName)); + rToolbar.set_item_label(i, aLabel); + OUString aTooltip(vcl::CommandInfoProvider::GetTooltipForCommand(sCommand, rFrame)); + rToolbar.set_item_tooltip_text(i, aTooltip); + auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, rFrame, eSize)); + rToolbar.set_item_icon(i, xImage); + } + + rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl)); +} + +IMPL_LINK(ToolbarUnoDispatcher, SelectHdl, const OString&, rCommand, void) +{ + comphelper::dispatchCommand(OUString::fromUtf8(rCommand), m_xFrame, + css::uno::Sequence<css::beans::PropertyValue>()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 1823601b5331..e0fcb5d63ebd 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -3696,11 +3696,14 @@ VclPtr<vcl::Window> VclBuilder::handleObject(vcl::Window *pParent, xmlreader::Xm { name = reader.getAttributeValue(false); sID = OString(name.begin, name.length); - sal_Int32 nDelim = sID.indexOf(':'); - if (nDelim != -1) + if (m_bLegacy) { - sCustomProperty = OUString::fromUtf8(sID.copy(nDelim+1)); - sID = sID.copy(0, nDelim); + sal_Int32 nDelim = sID.indexOf(':'); + if (nDelim != -1) + { + sCustomProperty = OUString::fromUtf8(sID.copy(nDelim+1)); + sID = sID.copy(0, nDelim); + } } } } diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 1c225335753a..aec86f2d2f73 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -6751,8 +6751,7 @@ public: GtkWidget* pImage = nullptr; if (pIconName) { - GdkPixbuf* pixbuf = load_icon_by_name(*pIconName); - if (!pixbuf) + if (GdkPixbuf* pixbuf = load_icon_by_name(*pIconName)) { pImage = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); @@ -6797,6 +6796,34 @@ public: } }; +namespace +{ + vcl::ImageType GtkToVcl(GtkIconSize eSize) + { + vcl::ImageType eRet; + switch (eSize) + { + case GTK_ICON_SIZE_MENU: + case GTK_ICON_SIZE_SMALL_TOOLBAR: + case GTK_ICON_SIZE_BUTTON: + eRet = vcl::ImageType::Size16; + break; + case GTK_ICON_SIZE_LARGE_TOOLBAR: + eRet = vcl::ImageType::Size26; + break; + case GTK_ICON_SIZE_DND: + case GTK_ICON_SIZE_DIALOG: + eRet = vcl::ImageType::Size32; + break; + default: + case GTK_ICON_SIZE_INVALID: + eRet = vcl::ImageType::Small; + break; + } + return eRet; + } +} + void GtkInstanceMenuButton::set_menu(weld::Menu* pMenu) { GtkInstanceMenu* pPopoverWidget = dynamic_cast<GtkInstanceMenu*>(pMenu); @@ -6941,6 +6968,49 @@ public: m_aMenuButtonMap[rIdent]->set_menu(pMenu); } + virtual int get_n_items() const override + { + return gtk_toolbar_get_n_items(m_pToolbar); + } + + virtual OString get_item_ident(int nIndex) const override + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pItem)); + return OString(pStr, pStr ? strlen(pStr) : 0); + } + + virtual void set_item_label(int nIndex, const OUString& rLabel) override + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + gtk_tool_button_set_label(GTK_TOOL_BUTTON(pItem), MapToGtkAccelerator(rLabel).getStr()); + } + + virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + + GtkWidget* pImage = nullptr; + if (GdkPixbuf* pixbuf = getPixbuf(rIcon)) + { + pImage = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); + } + + gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(pItem), pImage); + } + + virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex); + gtk_widget_set_tooltip_text(GTK_WIDGET(pItem), OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr()); + } + + virtual vcl::ImageType get_icon_size() const override + { + return GtkToVcl(gtk_toolbar_get_icon_size(m_pToolbar)); + } + virtual ~GtkInstanceToolbar() override { for (auto& a : m_aMap) |