summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-11-01 13:49:09 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-11-02 15:54:40 +0100
commitb461740a9ca89eb3b036c366ba60f24c7aad2b60 (patch)
tree073f7b021ed770d2569982e62d75dba201a4a6a9 /vcl
parent47c88b2c4db23f33a4371139745b8427564d3667 (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.cxx30
-rw-r--r--vcl/source/app/weldutils.cxx31
-rw-r--r--vcl/source/window/builder.cxx11
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx74
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)