summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-05-16 15:17:38 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-05-17 12:43:13 +0200
commit8a35ae3e6c5c45aa1426cfd81472b309d02a1b48 (patch)
treeb634b7d9ef93599b5139528a2fcd4a99c3372a0d /vcl
parent4c2034b808fed4f9dfd715d8a4813e788a7e97a4 (diff)
weld SvxIMapDlg
Change-Id: I5418176a015e61ef8eee4c2acd8e84b008f76f82 Reviewed-on: https://gerrit.libreoffice.org/72249 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.cxx62
-rw-r--r--vcl/source/window/builder.cxx2
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx108
3 files changed, 168 insertions, 4 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index b55b735f0f8f..9c8ccc804953 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -867,6 +867,58 @@ public:
}
};
+class SalInstanceToolbar : public SalInstanceWidget, public virtual weld::Toolbar
+{
+private:
+ VclPtr<ToolBox> m_xToolBox;
+
+ DECL_LINK(ClickHdl, ToolBox*, void);
+public:
+ SalInstanceToolbar(ToolBox* pToolBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
+ : SalInstanceWidget(pToolBox, pBuilder, bTakeOwnership)
+ , m_xToolBox(pToolBox)
+ {
+ m_xToolBox->SetSelectHdl(LINK(this, SalInstanceToolbar, ClickHdl));
+ }
+
+ virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override
+ {
+ m_xToolBox->EnableItem(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), bSensitive);
+ }
+
+ virtual bool get_item_sensitive(const OString& rIdent) const override
+ {
+ return m_xToolBox->IsItemEnabled(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
+ }
+
+ virtual void set_item_active(const OString& rIdent, bool bActive) override
+ {
+ m_xToolBox->CheckItem(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), bActive);
+ }
+
+ virtual bool get_item_active(const OString& rIdent) const override
+ {
+ return m_xToolBox->IsItemChecked(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
+ }
+
+ virtual void insert_separator(int pos, const OUString& /*rId*/) override
+ {
+ auto nInsertPos = pos == -1 ? ToolBox::APPEND : pos;
+ m_xToolBox->InsertSeparator(nInsertPos, 5);
+ }
+
+ virtual ~SalInstanceToolbar() override
+ {
+ m_xToolBox->SetSelectHdl(Link<ToolBox*, void>());
+ }
+};
+
+IMPL_LINK_NOARG(SalInstanceToolbar, ClickHdl, ToolBox*, void)
+{
+ sal_uInt16 nItemId = m_xToolBox->GetCurItemId();
+ signal_clicked(m_xToolBox->GetItemCommand(nItemId).toUtf8());
+}
+
class SalInstanceSizeGroup : public weld::SizeGroup
{
private:
@@ -4261,9 +4313,9 @@ public:
weld::Widget::connect_key_release(rLink);
}
- virtual void set_text_cursor() override
+ virtual void set_cursor(PointerStyle ePointerStyle) override
{
- m_xDrawingArea->SetPointer(PointerStyle::Text);
+ m_xDrawingArea->SetPointer(ePointerStyle);
}
virtual a11yref get_accessible_parent() override
@@ -5108,6 +5160,12 @@ public:
return pMenu ? std::make_unique<SalInstanceMenu>(pMenu, bTakeOwnership) : nullptr;
}
+ virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id, bool bTakeOwnership) override
+ {
+ ToolBox* pToolBox = m_xBuilder->get<ToolBox>(id);
+ return pToolBox ? std::make_unique<SalInstanceToolbar>(pToolBox, this, bTakeOwnership) : nullptr;
+ }
+
virtual std::unique_ptr<weld::SizeGroup> create_size_group() override
{
return std::make_unique<SalInstanceSizeGroup>();
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index fe67aec4b06b..3e0aabd0a4ca 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -2161,6 +2161,8 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
nItemId = pToolBox->GetItemCount() + 1;
//TODO: ImplToolItems::size_type -> sal_uInt16!
pToolBox->InsertItem(nItemId, extractLabel(rMap), nBits);
+ if (aCommand.isEmpty() && !m_bLegacy)
+ aCommand = OUString::fromUtf8(id);
pToolBox->SetItemCommand(nItemId, aCommand);
}
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 0d60969bff8d..d29fa4f4ef1a 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5331,6 +5331,100 @@ public:
}
};
+class GtkInstanceToolbar : public GtkInstanceWidget, public virtual weld::Toolbar
+{
+private:
+ GtkToolbar* m_pToolbar;
+
+ std::map<OString, GtkToolButton*> m_aMap;
+
+ static void collect(GtkWidget* pItem, gpointer widget)
+ {
+ GtkToolButton* pToolItem = GTK_TOOL_BUTTON(pItem);
+ GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
+ pThis->add_to_map(pToolItem);
+ }
+
+ void add_to_map(GtkToolButton* pToolItem)
+ {
+ const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pToolItem));
+ OString id(pStr, pStr ? strlen(pStr) : 0);
+ m_aMap[id] = pToolItem;
+ g_signal_connect(pToolItem, "clicked", G_CALLBACK(signalItemClicked), this);
+ }
+
+ static void signalItemClicked(GtkToolButton* pItem, gpointer widget)
+ {
+ GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
+ SolarMutexGuard aGuard;
+ pThis->signal_item_clicked(pItem);
+ }
+
+ void signal_item_clicked(GtkToolButton* pItem)
+ {
+ const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pItem));
+ signal_clicked(OString(pStr, pStr ? strlen(pStr) : 0));
+ }
+
+public:
+ GtkInstanceToolbar(GtkToolbar* pToolbar, GtkInstanceBuilder* pBuilder, bool bTakeOwnership)
+ : GtkInstanceWidget(GTK_WIDGET(pToolbar), pBuilder, bTakeOwnership)
+ , m_pToolbar(pToolbar)
+ {
+ gtk_container_foreach(GTK_CONTAINER(pToolbar), collect, this);
+ }
+
+ void disable_item_notify_events()
+ {
+ for (auto& a : m_aMap)
+ g_signal_handlers_block_by_func(a.second, reinterpret_cast<void*>(signalItemClicked), this);
+ }
+
+ void enable_item_notify_events()
+ {
+ for (auto& a : m_aMap)
+ g_signal_handlers_unblock_by_func(a.second, reinterpret_cast<void*>(signalItemClicked), this);
+ }
+
+ virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override
+ {
+ disable_item_notify_events();
+ gtk_widget_set_sensitive(GTK_WIDGET(m_aMap[rIdent]), bSensitive);
+ enable_item_notify_events();
+ }
+
+ virtual bool get_item_sensitive(const OString& rIdent) const override
+ {
+ return gtk_widget_get_sensitive(GTK_WIDGET(m_aMap.find(rIdent)->second));
+ }
+
+ virtual void set_item_active(const OString& rIdent, bool bActive) override
+ {
+ disable_item_notify_events();
+ gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(m_aMap[rIdent]), bActive);
+ enable_item_notify_events();
+ }
+
+ virtual bool get_item_active(const OString& rIdent) const override
+ {
+ return gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(m_aMap.find(rIdent)->second));
+ }
+
+ virtual void insert_separator(int pos, const OUString& rId) override
+ {
+ GtkToolItem* pItem = gtk_separator_tool_item_new();
+ gtk_buildable_set_name(GTK_BUILDABLE(pItem), OUStringToOString(rId, RTL_TEXTENCODING_UTF8).getStr());
+ gtk_toolbar_insert(m_pToolbar, pItem, pos);
+ gtk_widget_show(GTK_WIDGET(pItem));
+ }
+
+ virtual ~GtkInstanceToolbar() override
+ {
+ for (auto& a : m_aMap)
+ g_signal_handlers_disconnect_by_data(a.second, this);
+ }
+};
+
class GtkInstanceLinkButton : public GtkInstanceContainer, public virtual weld::LinkButton
{
private:
@@ -8445,9 +8539,10 @@ public:
m_xDevice->EnableRTL(bRTL);
}
- virtual void set_text_cursor() override
+ virtual void set_cursor(PointerStyle ePointerStyle) override
{
- set_cursor(GTK_WIDGET(m_pDrawingArea), "text");
+ GdkCursor *pCursor = GtkSalFrame::getDisplay()->getCursor(ePointerStyle);
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(m_pDrawingArea)), pCursor);
}
virtual void queue_draw() override
@@ -10231,6 +10326,15 @@ public:
return std::make_unique<GtkInstanceMenu>(pMenu, bTakeOwnership);
}
+ virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id, bool bTakeOwnership) override
+ {
+ GtkToolbar* pToolbar = GTK_TOOLBAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
+ if (!pToolbar)
+ return nullptr;
+ auto_add_parentless_widgets_to_container(GTK_WIDGET(pToolbar));
+ return std::make_unique<GtkInstanceToolbar>(pToolbar, this, bTakeOwnership);
+ }
+
virtual std::unique_ptr<weld::SizeGroup> create_size_group() override
{
return std::make_unique<GtkInstanceSizeGroup>();