diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-05-07 12:06:30 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-05-07 17:16:21 +0200 |
commit | eef7b7c467c44f86ce77f1ec483ca05f176440a7 (patch) | |
tree | e8a3673ed6528e459e78261faaa6141f686fd45a /sc | |
parent | 258761507b08f6965c7f57b26fa5a02a692903a1 (diff) |
Resolves: tdf#125106 fix cell protect TriState toggles
Change-Id: I1f145558fe9d86682e03481fb2800386d04d2b1d
Reviewed-on: https://gerrit.libreoffice.org/71904
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/attrdlg/tabpages.cxx | 71 | ||||
-rw-r--r-- | sc/source/ui/inc/tabpages.hxx | 25 |
2 files changed, 81 insertions, 15 deletions
diff --git a/sc/source/ui/attrdlg/tabpages.cxx b/sc/source/ui/attrdlg/tabpages.cxx index d974baf6bcf2..c0c2ff5ddabc 100644 --- a/sc/source/ui/attrdlg/tabpages.cxx +++ b/sc/source/ui/attrdlg/tabpages.cxx @@ -47,10 +47,10 @@ ScTabPageProtection::ScTabPageProtection(TabPageParent pParent, const SfxItemSet // States will be set in Reset bTriEnabled = bDontCare = bProtect = bHideForm = bHideCell = bHidePrint = false; - m_xBtnProtect->connect_toggled(LINK(this, ScTabPageProtection, ButtonClickHdl)); - m_xBtnHideCell->connect_toggled(LINK(this, ScTabPageProtection, ButtonClickHdl)); - m_xBtnHideFormula->connect_toggled(LINK(this, ScTabPageProtection, ButtonClickHdl)); - m_xBtnHidePrint->connect_toggled(LINK(this, ScTabPageProtection, ButtonClickHdl)); + m_xBtnProtect->connect_toggled(LINK(this, ScTabPageProtection, ProtectClickHdl)); + m_xBtnHideCell->connect_toggled(LINK(this, ScTabPageProtection, HideCellClickHdl)); + m_xBtnHideFormula->connect_toggled(LINK(this, ScTabPageProtection, HideFormulaClickHdl)); + m_xBtnHidePrint->connect_toggled(LINK(this, ScTabPageProtection, HidePrintClickHdl)); } ScTabPageProtection::~ScTabPageProtection() @@ -96,14 +96,10 @@ void ScTabPageProtection::Reset( const SfxItemSet* rCoreAttrs ) bHidePrint = pProtAttr->GetHidePrint(); } - // Start Controls - if (bTriEnabled) - { - m_xBtnProtect->set_state(TRISTATE_INDET); - m_xBtnHideCell->set_state(TRISTATE_INDET); - m_xBtnHideFormula->set_state(TRISTATE_INDET); - m_xBtnHidePrint->set_state(TRISTATE_INDET); - } + aHideCellState.bTriStateEnabled = bTriEnabled; + aProtectState.bTriStateEnabled = bTriEnabled; + aHideFormulaState.bTriStateEnabled = bTriEnabled; + aHidePrintState.bTriStateEnabled = bTriEnabled; UpdateButtons(); } @@ -146,7 +142,51 @@ DeactivateRC ScTabPageProtection::DeactivatePage( SfxItemSet* pSetP ) return DeactivateRC::LeavePage; } -IMPL_LINK(ScTabPageProtection, ButtonClickHdl, weld::ToggleButton&, rBox, void) +void TriStateEnabled::ButtonToggled(weld::ToggleButton& rToggle) +{ + if (bTriStateEnabled) + { + switch (eState) + { + case TRISTATE_INDET: + rToggle.set_state(TRISTATE_FALSE); + break; + case TRISTATE_TRUE: + rToggle.set_state(TRISTATE_INDET); + break; + case TRISTATE_FALSE: + rToggle.set_state(TRISTATE_TRUE); + break; + } + } + eState = rToggle.get_state(); +} + +IMPL_LINK(ScTabPageProtection, ProtectClickHdl, weld::ToggleButton&, rBox, void) +{ + aProtectState.ButtonToggled(rBox); + ButtonClick(rBox); +} + +IMPL_LINK(ScTabPageProtection, HideCellClickHdl, weld::ToggleButton&, rBox, void) +{ + aHideCellState.ButtonToggled(rBox); + ButtonClick(rBox); +} + +IMPL_LINK(ScTabPageProtection, HideFormulaClickHdl, weld::ToggleButton&, rBox, void) +{ + aHideFormulaState.ButtonToggled(rBox); + ButtonClick(rBox); +} + +IMPL_LINK(ScTabPageProtection, HidePrintClickHdl, weld::ToggleButton&, rBox, void) +{ + aHidePrintState.ButtonToggled(rBox); + ButtonClick(rBox); +} + +void ScTabPageProtection::ButtonClick(weld::ToggleButton& rBox) { TriState eState = rBox.get_state(); if (eState == TRISTATE_INDET) @@ -190,6 +230,11 @@ void ScTabPageProtection::UpdateButtons() m_xBtnHidePrint->set_state(bHidePrint ? TRISTATE_TRUE : TRISTATE_FALSE); } + aHideCellState.eState = m_xBtnHideCell->get_state(); + aProtectState.eState = m_xBtnProtect->get_state(); + aHideFormulaState.eState = m_xBtnHideFormula->get_state(); + aHidePrintState.eState = m_xBtnHidePrint->get_state(); + bool bEnable = (m_xBtnHideCell->get_state() != TRISTATE_TRUE); { m_xBtnProtect->set_sensitive(bEnable); diff --git a/sc/source/ui/inc/tabpages.hxx b/sc/source/ui/inc/tabpages.hxx index 8abd667ca7c7..5d195bb3cde2 100644 --- a/sc/source/ui/inc/tabpages.hxx +++ b/sc/source/ui/inc/tabpages.hxx @@ -22,6 +22,18 @@ #include <sfx2/tabdlg.hxx> +struct TriStateEnabled +{ + TriState eState; + bool bTriStateEnabled; + TriStateEnabled() + : eState(TRISTATE_INDET) + , bTriStateEnabled(true) + { + } + void ButtonToggled(weld::ToggleButton& rToggle); +}; + class ScTabPageProtection : public SfxTabPage { friend class VclPtr<ScTabPageProtection>; @@ -50,14 +62,23 @@ private: bool bHideCell; bool bHidePrint; + TriStateEnabled aHideCellState; + TriStateEnabled aProtectState; + TriStateEnabled aHideFormulaState; + TriStateEnabled aHidePrintState; + std::unique_ptr<weld::CheckButton> m_xBtnHideCell; std::unique_ptr<weld::CheckButton> m_xBtnProtect; std::unique_ptr<weld::CheckButton> m_xBtnHideFormula; std::unique_ptr<weld::CheckButton> m_xBtnHidePrint; // Handler: - DECL_LINK(ButtonClickHdl, weld::ToggleButton&, void); - void UpdateButtons(); + DECL_LINK(ProtectClickHdl, weld::ToggleButton&, void); + DECL_LINK(HideCellClickHdl, weld::ToggleButton&, void); + DECL_LINK(HideFormulaClickHdl, weld::ToggleButton&, void); + DECL_LINK(HidePrintClickHdl, weld::ToggleButton&, void); + void ButtonClick(weld::ToggleButton& rBox); + void UpdateButtons(); }; #endif // INCLUDED_SC_SOURCE_UI_INC_TABPAGES_HXX |