summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2022-05-16 15:11:52 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-05-16 18:23:01 +0200
commita1e2fc012113339564b3414d03a6eaf118ff2713 (patch)
treebb7851066547c751baa1285f6fb7b41c822c4908 /sw
parent9cfaeb1e083208d7bfcd7a291455b1cc1ef200ea (diff)
sw content controls, dropdown: edit list items: add modify and delete
Modify is really similar to insert, just we pre-fill the list item properties dialog with old data. Also allow moving items up / down, and eliminate a not needed frame in the inner dialog, which would assert when using the gen backend. With this, the content control dialog is quite complete for dropdowns. Change-Id: I26e77dd881f0a0eea44d2a6137f76fd29ab32fc5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134405 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'sw')
-rw-r--r--sw/source/ui/misc/contentcontroldlg.cxx92
-rw-r--r--sw/source/ui/misc/contentcontrollistitemdlg.cxx2
-rw-r--r--sw/source/uibase/inc/contentcontroldlg.hxx9
-rw-r--r--sw/uiconfig/swriter/ui/contentcontroldlg.ui42
-rw-r--r--sw/uiconfig/swriter/ui/contentcontrollistitemdlg.ui118
5 files changed, 192 insertions, 71 deletions
diff --git a/sw/source/ui/misc/contentcontroldlg.cxx b/sw/source/ui/misc/contentcontroldlg.cxx
index 7a066fb80d22..9e5902149720 100644
--- a/sw/source/ui/misc/contentcontroldlg.cxx
+++ b/sw/source/ui/misc/contentcontroldlg.cxx
@@ -38,14 +38,24 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt
, m_xListItems(m_xBuilder->weld_tree_view("listitems"))
, m_xListItemButtons(m_xBuilder->weld_box("listitembuttons"))
, m_xInsertBtn(m_xBuilder->weld_button("add"))
+ , m_xRenameBtn(m_xBuilder->weld_button("modify"))
+ , m_xDeleteBtn(m_xBuilder->weld_button("remove"))
+ , m_xMoveUpBtn(m_xBuilder->weld_button("moveup"))
+ , m_xMoveDownBtn(m_xBuilder->weld_button("movedown"))
, m_xOk(m_xBuilder->weld_button("ok"))
{
m_xOk->connect_clicked(LINK(this, SwContentControlDlg, OkHdl));
// Only 2 items would be visible by default.
m_xListItems->set_size_request(-1, m_xListItems->get_height_rows(8));
+ // Only the first column would have a non-zero size by default in the SvHeaderTabListBox case.
+ m_xListItems->set_column_fixed_widths({ 100, 100 });
m_xInsertBtn->connect_clicked(LINK(this, SwContentControlDlg, InsertHdl));
+ m_xRenameBtn->connect_clicked(LINK(this, SwContentControlDlg, RenameHdl));
+ m_xDeleteBtn->connect_clicked(LINK(this, SwContentControlDlg, DeleteHdl));
+ m_xMoveUpBtn->connect_clicked(LINK(this, SwContentControlDlg, MoveUpHdl));
+ m_xMoveDownBtn->connect_clicked(LINK(this, SwContentControlDlg, MoveDownHdl));
const SwPosition* pStart = rWrtShell.GetCursor()->Start();
SwTextNode* pTextNode = pStart->nNode.GetNode().GetTextNode();
@@ -153,4 +163,86 @@ IMPL_LINK_NOARG(SwContentControlDlg, InsertHdl, weld::Button&, void)
m_xListItems->set_text(nRow, aItem.m_aValue, 1);
}
+IMPL_LINK_NOARG(SwContentControlDlg, RenameHdl, weld::Button&, void)
+{
+ int nRow = m_xListItems->get_selected_index();
+ if (nRow < 0)
+ {
+ return;
+ }
+
+ SwContentControlListItem aItem;
+ aItem.m_aDisplayText = m_xListItems->get_text(nRow, 0);
+ aItem.m_aValue = m_xListItems->get_text(nRow, 1);
+ SwAbstractDialogFactory& rFact = swui::GetFactory();
+ ScopedVclPtr<VclAbstractDialog> pDlg(
+ rFact.CreateSwContentControlListItemDlg(m_xDialog.get(), aItem));
+ if (!pDlg->Execute())
+ {
+ return;
+ }
+
+ if (aItem.m_aDisplayText.isEmpty() && aItem.m_aValue.isEmpty())
+ {
+ // Maintain the invariant that value can't be empty.
+ return;
+ }
+
+ if (aItem.m_aValue.isEmpty())
+ {
+ aItem.m_aValue = aItem.m_aDisplayText;
+ }
+
+ m_xListItems->set_text(nRow, aItem.m_aDisplayText, 0);
+ m_xListItems->set_text(nRow, aItem.m_aValue, 1);
+}
+
+IMPL_LINK_NOARG(SwContentControlDlg, DeleteHdl, weld::Button&, void)
+{
+ int nRow = m_xListItems->get_selected_index();
+ if (nRow < 0)
+ {
+ return;
+ }
+
+ m_xListItems->remove(nRow);
+}
+
+IMPL_LINK_NOARG(SwContentControlDlg, MoveUpHdl, weld::Button&, void)
+{
+ int nRow = m_xListItems->get_selected_index();
+ if (nRow <= 0)
+ {
+ return;
+ }
+
+ SwContentControlListItem aItem;
+ aItem.m_aDisplayText = m_xListItems->get_text(nRow, 0);
+ aItem.m_aValue = m_xListItems->get_text(nRow, 1);
+ m_xListItems->remove(nRow);
+ --nRow;
+ m_xListItems->insert_text(nRow, aItem.m_aDisplayText);
+ m_xListItems->set_text(nRow, aItem.m_aValue, 1);
+ m_xListItems->select(nRow);
+}
+
+IMPL_LINK_NOARG(SwContentControlDlg, MoveDownHdl, weld::Button&, void)
+{
+ int nRow = m_xListItems->get_selected_index();
+ int nEndPos = m_xListItems->n_children() - 1;
+ if (nRow < 0 || nRow >= nEndPos)
+ {
+ return;
+ }
+
+ SwContentControlListItem aItem;
+ aItem.m_aDisplayText = m_xListItems->get_text(nRow, 0);
+ aItem.m_aValue = m_xListItems->get_text(nRow, 1);
+ m_xListItems->remove(nRow);
+ ++nRow;
+ m_xListItems->insert_text(nRow, aItem.m_aDisplayText);
+ m_xListItems->set_text(nRow, aItem.m_aValue, 1);
+ m_xListItems->select(nRow);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/misc/contentcontrollistitemdlg.cxx b/sw/source/ui/misc/contentcontrollistitemdlg.cxx
index ca6716b7b770..6ac160aebb10 100644
--- a/sw/source/ui/misc/contentcontrollistitemdlg.cxx
+++ b/sw/source/ui/misc/contentcontrollistitemdlg.cxx
@@ -33,6 +33,8 @@ SwContentControlListItemDlg::SwContentControlListItemDlg(weld::Widget* pParent,
, m_xOk(m_xBuilder->weld_button("ok"))
{
m_xOk->connect_clicked(LINK(this, SwContentControlListItemDlg, OkHdl));
+ m_xDisplayNameED->set_text(rItem.m_aDisplayText);
+ m_xValueED->set_text(rItem.m_aValue);
}
IMPL_LINK_NOARG(SwContentControlListItemDlg, OkHdl, weld::Button&, void)
diff --git a/sw/source/uibase/inc/contentcontroldlg.hxx b/sw/source/uibase/inc/contentcontroldlg.hxx
index 45a6659b4fbf..642c7d078fe5 100644
--- a/sw/source/uibase/inc/contentcontroldlg.hxx
+++ b/sw/source/uibase/inc/contentcontroldlg.hxx
@@ -40,9 +40,18 @@ class SwContentControlDlg final : public SfxDialogController
std::unique_ptr<weld::TreeView> m_xListItems;
std::unique_ptr<weld::Box> m_xListItemButtons;
std::unique_ptr<weld::Button> m_xInsertBtn;
+ std::unique_ptr<weld::Button> m_xRenameBtn;
+ std::unique_ptr<weld::Button> m_xDeleteBtn;
+ std::unique_ptr<weld::Button> m_xMoveUpBtn;
+ std::unique_ptr<weld::Button> m_xMoveDownBtn;
+
std::unique_ptr<weld::Button> m_xOk;
DECL_LINK(InsertHdl, weld::Button&, void);
+ DECL_LINK(RenameHdl, weld::Button&, void);
+ DECL_LINK(DeleteHdl, weld::Button&, void);
+ DECL_LINK(MoveUpHdl, weld::Button&, void);
+ DECL_LINK(MoveDownHdl, weld::Button&, void);
DECL_LINK(OkHdl, weld::Button&, void);
public:
diff --git a/sw/uiconfig/swriter/ui/contentcontroldlg.ui b/sw/uiconfig/swriter/ui/contentcontroldlg.ui
index 4a1eb810a75c..815d0f14ef35 100644
--- a/sw/uiconfig/swriter/ui/contentcontroldlg.ui
+++ b/sw/uiconfig/swriter/ui/contentcontroldlg.ui
@@ -206,13 +206,13 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="pack-type">end</property>
+ <property name="pack-type">start</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="remove">
- <property name="label" translatable="yes" context="contentcontordlg|remove">Remove</property>
+ <object class="GtkButton" id="modify">
+ <property name="label" translatable="yes" context="contentcontordlg|modify">Modify</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@@ -220,13 +220,13 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="pack-type">end</property>
+ <property name="pack-type">start</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="modify">
- <property name="label" translatable="yes" context="contentcontordlg|modify">Modify</property>
+ <object class="GtkButton" id="remove">
+ <property name="label" translatable="yes" context="contentcontordlg|remove">Remove</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@@ -234,10 +234,38 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="pack-type">end</property>
+ <property name="pack-type">start</property>
<property name="position">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="moveup">
+ <property name="label" translatable="yes" context="contentcontordlg|moveup">Move Up</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack-type">start</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="movedown">
+ <property name="label" translatable="yes" context="contentcontordlg|movedown">Move Down</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack-type">start</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/sw/uiconfig/swriter/ui/contentcontrollistitemdlg.ui b/sw/uiconfig/swriter/ui/contentcontrollistitemdlg.ui
index 8d580179be50..d9e6a770038e 100644
--- a/sw/uiconfig/swriter/ui/contentcontrollistitemdlg.ui
+++ b/sw/uiconfig/swriter/ui/contentcontrollistitemdlg.ui
@@ -73,79 +73,69 @@
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame1">
+ <!-- n-columns=2 n-rows=2 -->
+ <object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-top">6</property>
<child>
- <!-- n-columns=2 n-rows=2 -->
- <object class="GtkGrid" id="grid1">
+ <object class="GtkLabel" id="lbdisplayname">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="contentcontrollistitemdlg|lbdisplayname">Display name:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">displayname</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="GtkEntry" id="displayname">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="truncate-multiline">True</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lbvalue">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="contentcontrollistitemdlg|lbvalue">Value:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">value</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="GtkEntry" id="value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <property name="margin-start">12</property>
- <property name="margin-top">6</property>
- <child>
- <object class="GtkLabel" id="lbdisplayname">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="contentcontrollistitemdlg|lbdisplayname">Display name:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">displayname</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="GtkEntry" id="displayname">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- <property name="truncate-multiline">True</property>
- <property name="activates_default">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="lbvalue">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="contentcontrollistitemdlg|lbvalue">Value:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">value</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="GtkEntry" id="value">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- <property name="truncate-multiline">True</property>
- <property name="activates_default">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
+ <property name="truncate-multiline">True</property>
+ <property name="activates_default">True</property>
</object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
</child>
</object>
<packing>