diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-10-25 10:02:34 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-10-25 13:23:20 +0200 |
commit | ce155a8943bdd8cfa8e32e38fc83160df25beee1 (patch) | |
tree | 0e208aafd4ce8fb555d2c4d207f77b58d2356bb8 /vcl | |
parent | 749ef30c823e595f42e9844fb438441250389a0a (diff) |
weld SwTOXStylesTabPage
Change-Id: I1e7056ef8293ddc7072e95ee248e45b2785d1234
Reviewed-on: https://gerrit.libreoffice.org/62347
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 | 5 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 55 |
2 files changed, 43 insertions, 17 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 972e23dacaf9..485b404ac200 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1860,6 +1860,11 @@ public: return m_xTreeView->CalcWindowSizePixel(nRows); } + virtual void make_sorted() override + { + m_xTreeView->SetStyle(m_xTreeView->GetStyle() | WB_SORT); + } + ListBox& getTreeView() { return *m_xTreeView; diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 90f104511547..09594386fa1d 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3912,11 +3912,29 @@ namespace } } +namespace +{ + gint sort_func(GtkTreeModel* pModel, GtkTreeIter* a, GtkTreeIter* b, gpointer data) + { + comphelper::string::NaturalStringSorter* pSorter = static_cast<comphelper::string::NaturalStringSorter*>(data); + gchar* pName1; + gchar* pName2; + gtk_tree_model_get(pModel, a, 0, &pName1, -1); + gtk_tree_model_get(pModel, b, 0, &pName2, -1); + gint ret = pSorter->compare(OUString(pName1, strlen(pName1), RTL_TEXTENCODING_UTF8), + OUString(pName2, strlen(pName2), RTL_TEXTENCODING_UTF8)); + g_free(pName1); + g_free(pName2); + return ret; + } +} + class GtkInstanceTreeView : public GtkInstanceContainer, public virtual weld::TreeView { private: GtkTreeView* m_pTreeView; GtkListStore* m_pListStore; + std::unique_ptr<comphelper::string::NaturalStringSorter> m_xSorter; gulong m_nChangedSignalId; gulong m_nRowActivatedSignalId; @@ -4036,6 +4054,16 @@ public: enable_notify_events(); } + virtual void make_sorted() override + { + m_xSorter.reset(new comphelper::string::NaturalStringSorter( + ::comphelper::getProcessComponentContext(), + Application::GetSettings().GetUILanguageTag().getLocale())); + GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pListStore); + gtk_tree_sortable_set_sort_func(pSortable, 0, sort_func, m_xSorter.get(), nullptr); + gtk_tree_sortable_set_sort_column_id(pSortable, 0, GTK_SORT_ASCENDING); + } + virtual int n_children() const override { return gtk_tree_model_iter_n_children(GTK_TREE_MODEL(m_pListStore), nullptr); @@ -4122,12 +4150,22 @@ public: g_object_ref(m_pListStore); GtkInstanceContainer::freeze(); gtk_tree_view_set_model(m_pTreeView, nullptr); + if (m_xSorter) + { + GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pListStore); + gtk_tree_sortable_set_sort_column_id(pSortable, GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); + } enable_notify_events(); } virtual void thaw() override { disable_notify_events(); + if (m_xSorter) + { + GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pListStore); + gtk_tree_sortable_set_sort_column_id(pSortable, 0, GTK_SORT_ASCENDING); + } gtk_tree_view_set_model(m_pTreeView, GTK_TREE_MODEL(m_pListStore)); GtkInstanceContainer::thaw(); g_object_unref(m_pListStore); @@ -4853,23 +4891,6 @@ public: } }; -namespace -{ - gint sort_func(GtkTreeModel* pModel, GtkTreeIter* a, GtkTreeIter* b, gpointer data) - { - comphelper::string::NaturalStringSorter* pSorter = static_cast<comphelper::string::NaturalStringSorter*>(data); - gchar* pName1; - gchar* pName2; - gtk_tree_model_get(pModel, a, 0, &pName1, -1); - gtk_tree_model_get(pModel, b, 0, &pName2, -1); - gint ret = pSorter->compare(OUString(pName1, strlen(pName1), RTL_TEXTENCODING_UTF8), - OUString(pName2, strlen(pName2), RTL_TEXTENCODING_UTF8)); - g_free(pName1); - g_free(pName2); - return ret; - } -} - class GtkInstanceComboBox : public GtkInstanceContainer, public vcl::ISearchableStringList, public virtual weld::ComboBox { private: |