sw/Library_swui.mk | 1 sw/source/ui/misc/contentcontroldlg.cxx | 60 ++++++++++++++++ sw/source/uibase/inc/contentcontroldlg.hxx | 6 + sw/uiconfig/swriter/ui/contentcontroldlg.ui | 104 +++++++++++++++++++++++++++- 4 files changed, 169 insertions(+), 2 deletions(-)
New commits: commit f23b0d206e80fe740a45611d719fbd3ec81bcf57 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Thu Jun 2 08:21:14 2022 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Thu Jun 2 09:22:50 2022 +0200 sw content controls, checkbox: add properties dialog - add a new m_xCheckboxFrame to SwContentControlDlg that contains all the checkbox-related widgets - hide this frame for non-checkbox content controls - load the checked & unchecked states into entries to show their current value - provide buttons to easily pick special characters using SvxCharacterMap Change-Id: I8f2ad862d1102bac0198360d40cfe8b653ce4ccd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135286 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sw/Library_swui.mk b/sw/Library_swui.mk index ba69e5eadaea..9187d3c209a1 100644 --- a/sw/Library_swui.mk +++ b/sw/Library_swui.mk @@ -56,6 +56,7 @@ $(eval $(call gb_Library_use_libraries,swui,\ comphelper \ cppu \ cppuhelper \ + cui \ $(call gb_Helper_optional,DBCONNECTIVITY, \ dbtools) \ editeng \ diff --git a/sw/source/ui/misc/contentcontroldlg.cxx b/sw/source/ui/misc/contentcontroldlg.cxx index 49157fdec606..2d713b0091f4 100644 --- a/sw/source/ui/misc/contentcontroldlg.cxx +++ b/sw/source/ui/misc/contentcontroldlg.cxx @@ -20,6 +20,7 @@ #include <contentcontroldlg.hxx> #include <vcl/weld.hxx> +#include <cui/cuicharmap.hxx> #include <wrtsh.hxx> #include <ndtxt.hxx> @@ -34,6 +35,11 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt "ContentControlDialog") , m_rWrtShell(rWrtShell) , m_xShowingPlaceHolderCB(m_xBuilder->weld_check_button("showing_place_holder")) + , m_xCheckboxFrame(m_xBuilder->weld_frame("checkboxframe")) + , m_xCheckedState(m_xBuilder->weld_entry("checkboxcheckedentry")) + , m_xCheckedStateBtn(m_xBuilder->weld_button("btncheckboxchecked")) + , m_xUncheckedState(m_xBuilder->weld_entry("checkboxuncheckedentry")) + , m_xUncheckedStateBtn(m_xBuilder->weld_button("btncheckboxunchecked")) , m_xListItemsFrame(m_xBuilder->weld_frame("listitemsframe")) , m_xListItems(m_xBuilder->weld_tree_view("listitems")) , m_xListItemButtons(m_xBuilder->weld_box("listitembuttons")) @@ -44,6 +50,8 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt , m_xMoveDownBtn(m_xBuilder->weld_button("movedown")) , m_xOk(m_xBuilder->weld_button("ok")) { + m_xCheckedStateBtn->connect_clicked(LINK(this, SwContentControlDlg, SelectCharHdl)); + m_xUncheckedStateBtn->connect_clicked(LINK(this, SwContentControlDlg, SelectCharHdl)); m_xListItems->connect_changed(LINK(this, SwContentControlDlg, SelectionChangedHdl)); m_xOk->connect_clicked(LINK(this, SwContentControlDlg, OkHdl)); @@ -81,6 +89,18 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt m_xShowingPlaceHolderCB->set_state(eShowingPlaceHolder); m_xShowingPlaceHolderCB->save_state(); + if (m_pContentControl->GetCheckbox()) + { + m_xCheckedState->set_text(m_pContentControl->GetCheckedState()); + m_xCheckedState->save_value(); + m_xUncheckedState->set_text(m_pContentControl->GetUncheckedState()); + m_xUncheckedState->save_value(); + } + else + { + m_xCheckboxFrame->set_visible(false); + } + if (m_pContentControl->HasListItems()) { for (const auto& rListItem : m_pContentControl->GetListItems()) @@ -115,6 +135,16 @@ IMPL_LINK_NOARG(SwContentControlDlg, OkHdl, weld::Button&, void) bChanged = true; } + if (m_xCheckedState->get_value_changed_from_saved()) + { + m_pContentControl->SetCheckedState(m_xCheckedState->get_text()); + } + + if (m_xUncheckedState->get_value_changed_from_saved()) + { + m_pContentControl->SetUncheckedState(m_xUncheckedState->get_text()); + } + std::vector<SwContentControlListItem> aItems; for (int i = 0; i < m_xListItems->n_children(); ++i) { @@ -137,6 +167,36 @@ IMPL_LINK_NOARG(SwContentControlDlg, OkHdl, weld::Button&, void) m_xDialog->response(RET_OK); } +IMPL_LINK(SwContentControlDlg, SelectCharHdl, weld::Button&, rButton, void) +{ + SvxCharacterMap aMap(m_xDialog.get(), nullptr, nullptr); + sal_UCS4 cBullet = 0; + sal_Int32 nIndex = 0; + if (&rButton == m_xCheckedStateBtn.get()) + { + cBullet = m_pContentControl->GetCheckedState().iterateCodePoints(&nIndex); + } + else if (&rButton == m_xUncheckedStateBtn.get()) + { + cBullet = m_pContentControl->GetUncheckedState().iterateCodePoints(&nIndex); + } + aMap.SetChar(cBullet); + if (aMap.run() != RET_OK) + { + return; + } + + cBullet = aMap.GetChar(); + if (&rButton == m_xCheckedStateBtn.get()) + { + m_xCheckedState->set_text(OUString(&cBullet, 1)); + } + else if (&rButton == m_xUncheckedStateBtn.get()) + { + m_xUncheckedState->set_text(OUString(&cBullet, 1)); + } +} + IMPL_LINK_NOARG(SwContentControlDlg, InsertHdl, weld::Button&, void) { SwContentControlListItem aItem; diff --git a/sw/source/uibase/inc/contentcontroldlg.hxx b/sw/source/uibase/inc/contentcontroldlg.hxx index b6a42860e073..d4f90685ba04 100644 --- a/sw/source/uibase/inc/contentcontroldlg.hxx +++ b/sw/source/uibase/inc/contentcontroldlg.hxx @@ -36,6 +36,11 @@ class SwContentControlDlg final : public SfxDialogController std::vector<SwContentControlListItem> m_aSavedListItems; std::unique_ptr<weld::CheckButton> m_xShowingPlaceHolderCB; + std::unique_ptr<weld::Frame> m_xCheckboxFrame; + std::unique_ptr<weld::Entry> m_xCheckedState; + std::unique_ptr<weld::Button> m_xCheckedStateBtn; + std::unique_ptr<weld::Entry> m_xUncheckedState; + std::unique_ptr<weld::Button> m_xUncheckedStateBtn; std::unique_ptr<weld::Frame> m_xListItemsFrame; std::unique_ptr<weld::TreeView> m_xListItems; std::unique_ptr<weld::Box> m_xListItemButtons; @@ -54,6 +59,7 @@ class SwContentControlDlg final : public SfxDialogController DECL_LINK(MoveDownHdl, weld::Button&, void); DECL_LINK(SelectionChangedHdl, weld::TreeView&, void); DECL_LINK(OkHdl, weld::Button&, void); + DECL_LINK(SelectCharHdl, weld::Button&, void); public: SwContentControlDlg(weld::Window* pParent, SwWrtShell& rSh); diff --git a/sw/uiconfig/swriter/ui/contentcontroldlg.ui b/sw/uiconfig/swriter/ui/contentcontroldlg.ui index 8190317048ca..fabfb41a5c7a 100644 --- a/sw/uiconfig/swriter/ui/contentcontroldlg.ui +++ b/sw/uiconfig/swriter/ui/contentcontroldlg.ui @@ -112,6 +112,106 @@ <property name="position">0</property> </packing> </child> + <child> + <object class="GtkFrame" id="checkboxframe"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="checkboxcheckedlabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="contentcontroldlg|checkboxcheckedlabel">Checked character:</property> + <property name="mnemonic-widget">checkboxcheckedentry</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="checkboxuncheckedlabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="contentcontroldlg|checkboxuncheckedlabel">Unchecked character:</property> + <property name="mnemonic-widget">checkboxuncheckedentry</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btncheckboxchecked"> + <property name="label" translatable="yes" context="contentcontroldlg|btncheckboxchecked">Select...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btncheckboxunchecked"> + <property name="label" translatable="yes" context="contentcontroldlg|btncheckboxunchecked">Select...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="checkboxcheckedentry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="checkboxuncheckedentry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="lblcheckbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="contentcontroldlg|lblcheckbox">Check Box:</property> + <property name="use_underline">True</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> <child> <object class="GtkFrame" id="listitemsframe"> <property name="visible">True</property> @@ -188,7 +288,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> <child> @@ -274,7 +374,7 @@ <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> </object>