From 32e49998b2edde7a6a8fecddf5da71f3aa5815c2 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Fri, 5 Jun 2020 12:31:58 +0100 Subject: we can't mix radiobuttons and checkbuttons so don't imply otherwise MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I11a85090bd14d8655efb95433417764dd1f79052 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95592 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- cui/source/dialogs/multipat.cxx | 5 +---- cui/source/options/certpath.cxx | 5 +---- cui/source/options/optjava.cxx | 5 +---- include/vcl/weld.hxx | 5 ++--- sw/source/ui/index/cnttab.cxx | 6 +----- vcl/source/app/salvtables.cxx | 11 ++++++++--- vcl/unx/gtk3/gtk3gtkinst.cxx | 18 ++++++++++++++++++ 7 files changed, 32 insertions(+), 23 deletions(-) diff --git a/cui/source/dialogs/multipat.cxx b/cui/source/dialogs/multipat.cxx index 5b38d584d76f..bd121578c3bb 100644 --- a/cui/source/dialogs/multipat.cxx +++ b/cui/source/dialogs/multipat.cxx @@ -197,10 +197,7 @@ SvxMultiPathDialog::SvxMultiPathDialog(weld::Window* pParent) std::vector aWidths; aWidths.push_back(m_xRadioLB->get_checkbox_column_width()); m_xRadioLB->set_column_fixed_widths(aWidths); - - std::vector aRadioColumns; - aRadioColumns.push_back(0); - m_xRadioLB->set_toggle_columns_as_radio(aRadioColumns); + m_xRadioLB->set_toggle_columns_as_radio(); m_xRadioLB->connect_toggled(LINK(this, SvxMultiPathDialog, CheckHdl_Impl)); m_xRadioLB->connect_changed(LINK(this, SvxMultiPathDialog, SelectHdl_Impl)); m_xAddBtn->connect_clicked(LINK(this, SvxMultiPathDialog, AddHdl_Impl)); diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx index 3f2359a5ac50..3b491dadaf89 100644 --- a/cui/source/options/certpath.cxx +++ b/cui/source/options/certpath.cxx @@ -38,10 +38,7 @@ CertPathDialog::CertPathDialog(weld::Window* pParent) aWidths.push_back(m_xCertPathList->get_checkbox_column_width()); aWidths.push_back(m_xCertPathList->get_approximate_digit_width() * 20); m_xCertPathList->set_column_fixed_widths(aWidths); - - std::vector aRadioColumns; - aRadioColumns.push_back(0); - m_xCertPathList->set_toggle_columns_as_radio(aRadioColumns); + m_xCertPathList->set_toggle_columns_as_radio(); m_xCertPathList->connect_toggled(LINK(this, CertPathDialog, CheckHdl_Impl)); m_xManualButton->connect_clicked( LINK( this, CertPathDialog, ManualHdl_Impl ) ); diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx index 2d4df6cb3069..d9a54e0f250d 100644 --- a/cui/source/options/optjava.cxx +++ b/cui/source/options/optjava.cxx @@ -92,10 +92,7 @@ SvxJavaOptionsPage::SvxJavaOptionsPage(weld::Container* pPage, weld::DialogContr aWidths.push_back(m_xJavaList->get_checkbox_column_width()); aWidths.push_back(m_xJavaList->get_pixel_size("Sun Microsystems Inc.").Width()); m_xJavaList->set_column_fixed_widths(aWidths); - - std::vector aRadioColumns; - aRadioColumns.push_back(0); - m_xJavaList->set_toggle_columns_as_radio(aRadioColumns); + m_xJavaList->set_toggle_columns_as_radio(); m_xJavaEnableCB->connect_clicked( LINK( this, SvxJavaOptionsPage, EnableHdl_Impl ) ); m_xJavaList->connect_toggled( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) ); diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index fedf414432c3..b53bf27c7902 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -793,8 +793,6 @@ protected: std::function m_aCustomSort; protected: - std::vector m_aRadioIndexes; - void signal_changed() { m_aChangeHdl.Call(*this); } bool signal_row_activated() { return m_aRowActivatedHdl.Call(*this); } void signal_column_clicked(int nColumn) { m_aColumnClickedHdl.Call(nColumn); } @@ -1134,7 +1132,8 @@ public: // remove the selected nodes virtual void remove_selection() = 0; - void set_toggle_columns_as_radio(const std::vector& rCols) { m_aRadioIndexes = rCols; } + // call before inserting any content + virtual void set_toggle_columns_as_radio() = 0; virtual void vadjustment_set_value(int value) = 0; virtual int vadjustment_get_value() const = 0; diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx index 91e41c7a8b2e..300d046df5d0 100644 --- a/sw/source/ui/index/cnttab.cxx +++ b/sw/source/ui/index/cnttab.cxx @@ -499,11 +499,7 @@ SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(weld::Window* pParent, m_xLeftPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); m_xRightPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); m_xHeaderTree->connect_size_allocate(LINK(this, SwAddStylesDlg_Impl, TreeSizeAllocHdl)); - - std::vector aRadioColumns; - for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i) - aRadioColumns.push_back(i + 1); - m_xHeaderTree->set_toggle_columns_as_radio(aRadioColumns); + m_xHeaderTree->set_toggle_columns_as_radio(); m_xHeaderTree->connect_toggled(LINK(this, SwAddStylesDlg_Impl, RadioToggleOnHdl)); std::vector aWidths; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index e00adc86f6a5..5125af466f6b 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -3202,6 +3202,7 @@ private: o3tl::sorted_vector m_aExpandingPlaceHolderParents; // which columns should be custom rendered o3tl::sorted_vector m_aCustomRenders; + bool m_bTogglesAsRadio; bool m_bDisableCheckBoxAutoWidth; int m_nSortColumn; @@ -3329,6 +3330,7 @@ public: , m_xTreeView(pTreeView) , m_aCheckButtonData(pTreeView, false) , m_aRadioButtonData(pTreeView, true) + , m_bTogglesAsRadio(false) , m_bDisableCheckBoxAutoWidth(false) , m_nSortColumn(-1) { @@ -3814,10 +3816,13 @@ public: return ::get_toggle(rVclIter.iter, col); } + virtual void set_toggle_columns_as_radio() override + { + m_bTogglesAsRadio = true; + } + void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col) { - bool bRadio = std::find(m_aRadioIndexes.begin(), m_aRadioIndexes.end(), col) - != m_aRadioIndexes.end(); ++col; //skip dummy/expander column // blank out missing entries @@ -3826,7 +3831,7 @@ public: if (static_cast(col) == pEntry->ItemCount()) { - SvLBoxButtonData* pData = bRadio ? &m_aRadioButtonData : &m_aCheckButtonData; + SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData; // if we want to have the implicit auto-sizing of the checkbox // column we need to call EnableCheckButton and CheckBoxInserted to diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index b07acf43e0b6..f48e98c46903 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -10430,6 +10430,24 @@ public: } } + virtual void set_toggle_columns_as_radio() override + { + for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry)) + { + GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data); + GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn)); + for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer)) + { + GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data); + if (!GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer)) + continue; + GtkCellRendererToggle* pToggle = GTK_CELL_RENDERER_TOGGLE(pCellRenderer); + gtk_cell_renderer_toggle_set_radio(pToggle, true); + } + g_list_free(pRenderers); + } + } + virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override { const GtkInstanceTreeIter& rGtkIter = static_cast(rIter); -- cgit