summaryrefslogtreecommitdiffstats
path: root/sfx2
diff options
context:
space:
mode:
authorMuhammet Kara <muhammet.kara@collabora.com>2019-05-31 18:02:58 +0300
committerMuhammet Kara <muhammet.kara@collabora.com>2019-06-17 23:29:50 +0200
commit010351bf25daf85da6a3ec1a2f78d9536a7c7642 (patch)
treee1ddf69fbb24f003838aab61eb34e7a30723ffa0 /sfx2
parentAuto redaction dialog first iteration (diff)
downloadcore-010351bf25daf85da6a3ec1a2f78d9536a7c7642.tar.gz
core-010351bf25daf85da6a3ec1a2f78d9536a7c7642.zip
Auto redaction dialog second iteration
* Add the Add handler * Add SfxAddTargetDialog dialog * Add the Delete handler Change-Id: I9c466754f6b593ffe3c8a1cc8034bbe47674f591 Reviewed-on: https://gerrit.libreoffice.org/73285 Tested-by: Jenkins Reviewed-by: Muhammet Kara <muhammet.kara@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/74227 Tested-by: Muhammet Kara <muhammet.kara@collabora.com>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/UIConfig_sfx.mk1
-rw-r--r--sfx2/inc/autoredactdialog.hxx146
-rw-r--r--sfx2/source/doc/autoredactdialog.cxx190
-rw-r--r--sfx2/source/doc/objserv.cxx2
-rw-r--r--sfx2/uiconfig/ui/addtargetdialog.ui235
-rw-r--r--sfx2/uiconfig/ui/autoredactdialog.ui10
6 files changed, 557 insertions, 27 deletions
diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk
index d6ff78053025..64697321a02c 100644
--- a/sfx2/UIConfig_sfx.mk
+++ b/sfx2/UIConfig_sfx.mk
@@ -11,6 +11,7 @@ $(eval $(call gb_UIConfig_UIConfig,sfx))
$(eval $(call gb_UIConfig_add_uifiles,sfx,\
sfx2/uiconfig/ui/alienwarndialog \
+ sfx2/uiconfig/ui/addtargetdialog \
sfx2/uiconfig/ui/autoredactdialog \
sfx2/uiconfig/ui/bookmarkdialog \
sfx2/uiconfig/ui/bookmarkmenu \
diff --git a/sfx2/inc/autoredactdialog.hxx b/sfx2/inc/autoredactdialog.hxx
new file mode 100644
index 000000000000..26b29bf10cf5
--- /dev/null
+++ b/sfx2/inc/autoredactdialog.hxx
@@ -0,0 +1,146 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SFX2_INC_AUTOREDACTDIALOG_HXX
+#define INCLUDED_SFX2_INC_AUTOREDACTDIALOG_HXX
+
+#include <memory>
+#include <sal/config.h>
+#include <sfx2/dllapi.h>
+#include <sfx2/basedlgs.hxx>
+#include <sfx2/objsh.hxx>
+
+#include <vcl/idle.hxx>
+#include <o3tl/typed_flags_set.hxx>
+
+namespace weld
+{
+class Button;
+}
+namespace weld
+{
+class ComboBox;
+}
+namespace weld
+{
+class Label;
+}
+namespace weld
+{
+class Window;
+}
+namespace weld
+{
+class TreeView;
+}
+
+enum RedactionTargetType
+{
+ REDACTION_TARGET_TEXT,
+ REDACTION_TARGET_REGEX,
+ REDACTION_TARGET_PREDEFINED,
+ REDACTION_TARGET_UNKNOWN
+};
+
+/// Keeps information for a single redaction target
+struct RedactionTarget
+{
+ OUString sName;
+ RedactionTargetType sType;
+ OUString sContent;
+ bool bCaseSensitive;
+ bool bWholeWords;
+ sal_uInt32 nID;
+};
+
+/// Used to display the targets list
+class TargetsTable
+{
+ std::unique_ptr<weld::TreeView> m_xControl;
+ int GetRowByTargetName(const OUString& sName);
+
+public:
+ TargetsTable(std::unique_ptr<weld::TreeView> xControl);
+ void InsertTarget(RedactionTarget* pTarget);
+ void SelectByName(const OUString& sName);
+ RedactionTarget* GetTargetByName(const OUString& sName);
+ OUString GetNameProposal();
+
+ void unselect_all() { m_xControl->unselect_all(); }
+ bool has_focus() const { return m_xControl->has_focus(); }
+ int n_children() const { return m_xControl->n_children(); }
+ int get_selected_index() const { return m_xControl->get_selected_index(); }
+ std::vector<int> get_selected_rows() const { return m_xControl->get_selected_rows(); }
+ void clear() { m_xControl->clear(); }
+ void remove(int nRow) { m_xControl->remove(nRow); }
+ void select(int nRow) { m_xControl->select(nRow); }
+ OUString get_id(int nRow) const { return m_xControl->get_id(nRow); }
+
+ //void connect_changed(const Link<weld::TreeView&, void>& rLink) { m_xControl->connect_changed(rLink); }
+ //void connect_row_activated(const Link<weld::TreeView&, void>& rLink) { m_xControl->connect_row_activated(rLink); }
+};
+
+class SFX2_DLLPUBLIC SfxAutoRedactDialog : public SfxDialogController
+{
+ SfxObjectShellLock m_xDocShell;
+ std::vector<std::pair<RedactionTarget*, OUString>> m_aTableTargets;
+
+ std::unique_ptr<weld::Label> m_xRedactionTargetsLabel;
+ std::unique_ptr<TargetsTable> m_xTargetsBox;
+ std::unique_ptr<weld::Button> m_xLoadBtn;
+ std::unique_ptr<weld::Button> m_xSaveBtn;
+ std::unique_ptr<weld::Button> m_xAddBtn;
+ std::unique_ptr<weld::Button> m_xEditBtn;
+ std::unique_ptr<weld::Button> m_xDeleteBtn;
+
+ /*DECL_LINK(LoadHdl, weld::Button&, void);
+ DECL_LINK(SaveHdl, weld::Button&, void);*/
+ DECL_LINK(AddHdl, weld::Button&, void);
+ //DECL_LINK(EditHdl, weld::Button&, void);
+ DECL_LINK(DeleteHdl, weld::Button&, void);
+
+public:
+ SfxAutoRedactDialog(weld::Window* pParent);
+ virtual ~SfxAutoRedactDialog() override;
+
+ /*
+ * Check if the dialog has any valid redaction targets.
+ */
+ bool hasTargets() const;
+
+ // TODO: Some method(s) to check emptiness/validity
+ // TODO: Some method(s) to get the search params/objects
+ // TODO: Some method(s) to load/save redaction target sets
+};
+
+class SfxAddTargetDialog : public weld::GenericDialogController
+{
+private:
+ std::unique_ptr<weld::Entry> m_xName;
+ std::unique_ptr<weld::ComboBox> m_xType;
+ std::unique_ptr<weld::Entry> m_xContent;
+ std::unique_ptr<weld::CheckButton> m_xCaseSensitive;
+ std::unique_ptr<weld::CheckButton> m_xWholeWords;
+
+public:
+ SfxAddTargetDialog(weld::Window* pWindow, const OUString& rName);
+
+ OUString getName() const { return m_xName->get_text(); }
+ RedactionTargetType getType() const;
+ OUString getContent() const { return m_xContent->get_text(); }
+ bool isCaseSensitive() const
+ {
+ return m_xCaseSensitive->get_state() == TriState::TRISTATE_TRUE;
+ }
+ bool isWholeWords() const { return m_xWholeWords->get_state() == TriState::TRISTATE_TRUE; }
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sfx2/source/doc/autoredactdialog.cxx b/sfx2/source/doc/autoredactdialog.cxx
index 0974a4f03b27..5d94906e9ba8 100644
--- a/sfx2/source/doc/autoredactdialog.cxx
+++ b/sfx2/source/doc/autoredactdialog.cxx
@@ -8,7 +8,7 @@
*/
#include <osl/file.hxx>
-#include <sfx2/autoredactdialog.hxx>
+#include <autoredactdialog.hxx>
#include <vcl/layout.hxx>
#include <vcl/idle.hxx>
#include <vcl/gdimtf.hxx>
@@ -50,17 +50,43 @@ int TargetsTable::GetRowByTargetName(const OUString& sName)
TargetsTable::TargetsTable(std::unique_ptr<weld::TreeView> xControl)
: m_xControl(std::move(xControl))
{
- m_xControl->set_size_request(550, 250);
+ m_xControl->set_size_request(555, 250);
std::vector<int> aWidths;
aWidths.push_back(100);
- aWidths.push_back(45);
- aWidths.push_back(110);
+ aWidths.push_back(50);
+ aWidths.push_back(200);
+ aWidths.push_back(105);
aWidths.push_back(105);
- aWidths.push_back(150);
m_xControl->set_column_fixed_widths(aWidths);
m_xControl->set_selection_mode(SelectionMode::Multiple);
}
+namespace
+{
+OUString getTypeName(RedactionTargetType nType)
+{
+ OUString sTypeName("Unknown");
+
+ switch (nType)
+ {
+ case RedactionTargetType::REDACTION_TARGET_TEXT:
+ sTypeName = "Text";
+ break;
+ case RedactionTargetType::REDACTION_TARGET_REGEX:
+ sTypeName = "Regex";
+ break;
+ case RedactionTargetType::REDACTION_TARGET_PREDEFINED:
+ sTypeName = "Predefined";
+ break;
+ case RedactionTargetType::REDACTION_TARGET_UNKNOWN:
+ sTypeName = "Unknown";
+ break;
+ }
+
+ return sTypeName;
+}
+}
+
void TargetsTable::InsertTarget(RedactionTarget* pTarget)
{
if (!pTarget)
@@ -78,10 +104,10 @@ void TargetsTable::InsertTarget(RedactionTarget* pTarget)
// Add to the end
int nRow = m_xControl->n_children();
m_xControl->append(OUString::number(reinterpret_cast<sal_Int64>(pTarget)), pTarget->sName);
- m_xControl->set_text(nRow, pTarget->sType, 1);
- m_xControl->set_text(nRow, pTarget->bCaseSensitive ? OUString("Yes") : OUString("No"), 2);
- m_xControl->set_text(nRow, pTarget->bWholeWords ? OUString("Yes") : OUString("No"), 3);
- m_xControl->set_text(nRow, pTarget->sDescription, 4);
+ m_xControl->set_text(nRow, getTypeName(pTarget->sType), 1);
+ m_xControl->set_text(nRow, pTarget->sContent, 2);
+ m_xControl->set_text(nRow, pTarget->bCaseSensitive ? OUString("Yes") : OUString("No"), 3);
+ m_xControl->set_text(nRow, pTarget->bWholeWords ? OUString("Yes") : OUString("No"), 4);
}
void TargetsTable::SelectByName(const OUString& sName)
@@ -121,6 +147,107 @@ OUString TargetsTable::GetNameProposal()
return sDefaultTargetName + " " + OUString::number(nHighestTargetId + 1);
}
+/*IMPL_LINK_NOARG(SfxAutoRedactDialog, LoadHdl, weld::Button&, void)
+{
+ //TODO: Implement
+ //Load a targets list from a previously saved file (a json file in the user profile dir?)
+}
+
+IMPL_LINK_NOARG(SfxAutoRedactDialog, SaveHdl, weld::Button&, void)
+{
+ //TODO: Implement
+ //Allow saving the targets into a file
+}*/
+
+IMPL_LINK_NOARG(SfxAutoRedactDialog, AddHdl, weld::Button&, void)
+{
+ // Open the Add Target dialog, craete a new target and insert into the targets vector and the listbox
+ SfxAddTargetDialog aAddTargetDialog(getDialog(), m_xTargetsBox->GetNameProposal());
+
+ bool bIncomplete;
+ do
+ {
+ bIncomplete = false;
+
+ if (aAddTargetDialog.run() != RET_OK)
+ return;
+
+ if (aAddTargetDialog.getName().isEmpty()
+ || aAddTargetDialog.getType() == RedactionTargetType::REDACTION_TARGET_UNKNOWN
+ || aAddTargetDialog.getContent().isEmpty())
+ {
+ bIncomplete = true;
+ std::unique_ptr<weld::MessageDialog> xBox(
+ Application::CreateMessageDialog(getDialog(), VclMessageType::Warning,
+ VclButtonsType::Ok, "All fields are required"));
+ xBox->run();
+ }
+ else if (m_xTargetsBox->GetTargetByName(aAddTargetDialog.getName()))
+ {
+ bIncomplete = true;
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(
+ getDialog(), VclMessageType::Warning, VclButtonsType::Ok,
+ "There is already a target with this name"));
+ xBox->run();
+ }
+
+ } while (bIncomplete);
+
+ //Alright, we now have everything we need to construct a new target
+ RedactionTarget* redactiontarget = new RedactionTarget(
+ { aAddTargetDialog.getName(), aAddTargetDialog.getType(), aAddTargetDialog.getContent(),
+ aAddTargetDialog.isCaseSensitive(), aAddTargetDialog.isWholeWords(), 0 });
+
+ // Only the visual/display part
+ m_xTargetsBox->InsertTarget(redactiontarget);
+
+ // Actually add to the targets vector
+ if (m_xTargetsBox->GetTargetByName(redactiontarget->sName))
+ m_aTableTargets.emplace_back(redactiontarget, redactiontarget->sName);
+ else
+ {
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(
+ getDialog(), VclMessageType::Warning, VclButtonsType::Ok,
+ "An error occured while adding new target. Please report this incidence."));
+ xBox->run();
+ delete redactiontarget;
+ }
+}
+
+/*IMPL_LINK_NOARG(SfxAutoRedactDialog, EditHdl, weld::Button&, void)
+{
+ //TODO: Implement
+ //Reuse the Add Target dialog
+}*/
+
+IMPL_LINK_NOARG(SfxAutoRedactDialog, DeleteHdl, weld::Button&, void)
+{
+ std::vector<int> aSelectedRows = m_xTargetsBox->get_selected_rows();
+
+ //No selection, so nothing to delete
+ if (aSelectedRows.empty())
+ return;
+
+ if (aSelectedRows.size() > 1)
+ {
+ OUString sMsg("Are you sure you would like to delete "
+ + OUString::number(aSelectedRows.size()) + " targets at once?");
+ //Warn the user about multiple deletions
+ std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(
+ getDialog(), VclMessageType::Question, VclButtonsType::OkCancel, sMsg));
+ if (xBox->run() == RET_CANCEL)
+ return;
+ }
+
+ // After each delete, the indexes of the following items decrease by one.
+ int delta = 0;
+ for (const auto& i : aSelectedRows)
+ {
+ m_aTableTargets.erase(m_aTableTargets.begin() + (i - delta));
+ m_xTargetsBox->remove(i - delta++);
+ }
+}
+
SfxAutoRedactDialog::SfxAutoRedactDialog(weld::Window* pParent)
: SfxDialogController(pParent, "sfx/ui/autoredactdialog.ui", "AutoRedactDialog")
, m_xRedactionTargetsLabel(m_xBuilder->weld_label("labelRedactionTargets"))
@@ -147,19 +274,14 @@ SfxAutoRedactDialog::SfxAutoRedactDialog(weld::Window* pParent)
//m_aTargets.Update();
}
- // fill the targets box
- /*const sal_uInt16 nCount = m_aTemplates.GetRegionCount();
- if (nCount)
- {
- for(sal_uInt16 i = 0; i < nCount; ++i)
- m_xRegionLb->append_text(m_aTemplates.GetFullRegionName(i));
- m_xRegionLb->connect_changed(LINK(this, SfxNewFileDialog, RegionSelect));
- }*/
-
- /*RedactionTarget* redactiontarget
- = new RedactionTarget({ 0, "Target 1", "String", true, false, "Some description" });
+ // TODO: fill the targets box
- m_xTargetsBox->InsertTarget(redactiontarget);*/
+ // Handler connections
+ //m_xLoadBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, LoadHdl));
+ //m_xSaveBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, SaveHdl));
+ m_xAddBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, AddHdl));
+ //m_xEditBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, EditHdl));
+ m_xDeleteBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, DeleteHdl));
}
SfxAutoRedactDialog::~SfxAutoRedactDialog()
@@ -178,4 +300,30 @@ bool SfxAutoRedactDialog::hasTargets() const
return true;
}
+SfxAddTargetDialog::SfxAddTargetDialog(weld::Window* pParent, const OUString& rName)
+ : GenericDialogController(pParent, "sfx/ui/addtargetdialog.ui", "AddTargetDialog")
+ , m_xName(m_xBuilder->weld_entry("name"))
+ , m_xType(m_xBuilder->weld_combo_box("type"))
+ , m_xContent(m_xBuilder->weld_entry("content"))
+ , m_xCaseSensitive(m_xBuilder->weld_check_button("checkboxCaseSensitive"))
+ , m_xWholeWords(m_xBuilder->weld_check_button("checkboxWholeWords"))
+{
+ m_xName->set_text(rName);
+ m_xName->select_region(0, rName.getLength());
+}
+
+RedactionTargetType SfxAddTargetDialog::getType() const
+{
+ OUString sTypeID = m_xType->get_active_id();
+
+ if (sTypeID == "text")
+ return RedactionTargetType::REDACTION_TARGET_TEXT;
+ else if (sTypeID == "regex")
+ return RedactionTargetType::REDACTION_TARGET_REGEX;
+ else if (sTypeID == "predefined")
+ return RedactionTargetType::REDACTION_TARGET_PREDEFINED;
+ else
+ return RedactionTargetType::REDACTION_TARGET_UNKNOWN;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index 1e5727c489b0..5599b1469b0f 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -122,7 +122,7 @@
#include <svx/unoshape.hxx>
#include <com/sun/star/util/Color.hpp>
-#include <sfx2/autoredactdialog.hxx>
+#include <autoredactdialog.hxx>
using namespace ::com::sun::star;
using namespace ::com::sun::star::lang;
diff --git a/sfx2/uiconfig/ui/addtargetdialog.ui b/sfx2/uiconfig/ui/addtargetdialog.ui
new file mode 100644
index 000000000000..3d45c7a240bd
--- /dev/null
+++ b/sfx2/uiconfig/ui/addtargetdialog.ui
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="sw">
+ <requires lib="gtk+" version="3.18"/>
+ <object class="GtkDialog" id="AddTargetDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes" context="addtargetdialog|AddTargetDialog">Add Target</property>
+ <property name="modal">True</property>
+ <property name="default_width">0</property>
+ <property name="default_height">0</property>
+ <property name="type_hint">dialog</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkButton" id="cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="close">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="help">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ <property name="secondary">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label_name">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="addtargetdialog|label_name">Name:</property>
+ <property name="use_underline">True</property>
+ <accessibility>
+ <relation type="label-for" target="name"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="margin_left">2</property>
+ <property name="margin_bottom">2</property>
+ <property name="activates_default">True</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_name"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_type">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="addtargetdialog|label_type">Type:</property>
+ <property name="use_underline">True</property>
+ <accessibility>
+ <relation type="label-for" target="type"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_content">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="addtargetdialog|label_content">Content:</property>
+ <property name="use_underline">True</property>
+ <accessibility>
+ <relation type="label-for" target="content"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="content">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="margin_left">2</property>
+ <property name="activates_default">True</property>
+ <accessibility>
+ <relation type="labelled-by" target="label_content"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="type">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <items>
+ <item id="text" translatable="yes" context="addtargetdialog|type">Text</item>
+ <item id="regex" translatable="yes" context="addtargetdialog|type">Regex</item>
+ <item id="predefined" translatable="yes" context="addtargetdialog|type">Predefined</item>
+ </items>
+ <accessibility>
+ <relation type="labelled-by" target="label_type"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="checkboxCaseSensitive">
+ <property name="label" translatable="yes" context="addtargetdialog|checkboxCaseSensitive">Case Sensitive</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkboxWholeWords">
+ <property name="label" translatable="yes" context="addtargetdialog|checkboxWholeWords">Whole Words Only</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancel</action-widget>
+ <action-widget response="-5">close</action-widget>
+ <action-widget response="-11">help</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/sfx2/uiconfig/ui/autoredactdialog.ui b/sfx2/uiconfig/ui/autoredactdialog.ui
index 01c0dc6e9592..113002775125 100644
--- a/sfx2/uiconfig/ui/autoredactdialog.ui
+++ b/sfx2/uiconfig/ui/autoredactdialog.ui
@@ -8,12 +8,12 @@
<column type="gchararray"/>
<!-- column-name sType -->
<column type="gchararray"/>
+ <!-- column-name sContent -->
+ <column type="gchararray"/>
<!-- column-name bIsCaseSensitive -->
<column type="gchararray"/>
<!-- column-name bWholeWords -->
<column type="gchararray"/>
- <!-- column-name sDescription -->
- <column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
</columns>
@@ -143,7 +143,7 @@
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
<property name="resizable">True</property>
<property name="spacing">6</property>
- <property name="title" translatable="yes" context="autoredactdialog|target">Case Sensitive</property>
+ <property name="title" translatable="yes" context="autoredactdialog|target">Content</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer2"/>
<attributes>
@@ -156,7 +156,7 @@
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
<property name="resizable">True</property>
<property name="spacing">6</property>
- <property name="title" translatable="yes" context="autoredactdialog|target">Whole Words</property>
+ <property name="title" translatable="yes" context="autoredactdialog|target">Case Sensitive</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer3"/>
<attributes>
@@ -169,7 +169,7 @@
<object class="GtkTreeViewColumn" id="treeviewcolumn4">
<property name="resizable">True</property>
<property name="spacing">6</property>
- <property name="title" translatable="yes" context="autoredactdialog|target">Description</property>
+ <property name="title" translatable="yes" context="autoredactdialog|target">Whole Words</property>
<child>
<object class="GtkCellRendererText" id="cellrenderer4"/>
<attributes>