sfx2/inc/autoredactdialog.hxx | 8 +- sfx2/source/doc/autoredactdialog.cxx | 131 +++++++++++++++++++++++++++++++++-- 2 files changed, 133 insertions(+), 6 deletions(-)
New commits: commit 670130039c5b100acabe08bc2077980c5c63f82f Author: Muhammet Kara <muhammet.k...@collabora.com> AuthorDate: Sat Jun 8 16:37:04 2019 +0300 Commit: Muhammet Kara <muhammet.k...@collabora.com> CommitDate: Sat Jun 8 19:34:49 2019 +0200 Auto redaction dialog 3rd iteration * Add the Edit handler Change-Id: Id900d2aab6fa6795455012aaf2bcaf755ccca139 Reviewed-on: https://gerrit.libreoffice.org/73705 Tested-by: Jenkins Reviewed-by: Muhammet Kara <muhammet.k...@collabora.com> diff --git a/sfx2/inc/autoredactdialog.hxx b/sfx2/inc/autoredactdialog.hxx index 26b29bf10cf5..267427c90b21 100644 --- a/sfx2/inc/autoredactdialog.hxx +++ b/sfx2/inc/autoredactdialog.hxx @@ -82,6 +82,9 @@ public: void select(int nRow) { m_xControl->select(nRow); } OUString get_id(int nRow) const { return m_xControl->get_id(nRow); } + // Sync data on the targets box with the data on the target + void setRowData(const int& nRowIndex, const RedactionTarget* pTarget); + //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); } }; @@ -102,7 +105,7 @@ class SFX2_DLLPUBLIC SfxAutoRedactDialog : public SfxDialogController /*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(EditHdl, weld::Button&, void); DECL_LINK(DeleteHdl, weld::Button&, void); public: @@ -130,6 +133,9 @@ private: public: SfxAddTargetDialog(weld::Window* pWindow, const OUString& rName); + SfxAddTargetDialog(weld::Window* pWindow, const OUString& sName, + const RedactionTargetType& eTargetType, const OUString& sContent, + const bool& bCaseSensitive, const bool& bWholeWords); OUString getName() const { return m_xName->get_text(); } RedactionTargetType getType() const; diff --git a/sfx2/source/doc/autoredactdialog.cxx b/sfx2/source/doc/autoredactdialog.cxx index 30977b82e878..2849f525e0e2 100644 --- a/sfx2/source/doc/autoredactdialog.cxx +++ b/sfx2/source/doc/autoredactdialog.cxx @@ -85,6 +85,30 @@ OUString getTypeName(RedactionTargetType nType) return sTypeName; } + +/// Returns TypeID to be used in the add/edit target dialog +OUString getTypeID(RedactionTargetType nType) +{ + OUString sTypeID("unknown"); + + switch (nType) + { + case RedactionTargetType::REDACTION_TARGET_TEXT: + sTypeID = "text"; + break; + case RedactionTargetType::REDACTION_TARGET_REGEX: + sTypeID = "regex"; + break; + case RedactionTargetType::REDACTION_TARGET_PREDEFINED: + sTypeID = "predefined"; + break; + case RedactionTargetType::REDACTION_TARGET_UNKNOWN: + sTypeID = "unknown"; + break; + } + + return sTypeID; +} } void TargetsTable::InsertTarget(RedactionTarget* pTarget) @@ -147,6 +171,15 @@ OUString TargetsTable::GetNameProposal() return sDefaultTargetName + " " + OUString::number(nHighestTargetId + 1); } +void TargetsTable::setRowData(const int& nRowIndex, const RedactionTarget* pTarget) +{ + m_xControl->set_text(nRowIndex, pTarget->sName, 0); + m_xControl->set_text(nRowIndex, getTypeName(pTarget->sType), 1); + m_xControl->set_text(nRowIndex, pTarget->sContent, 2); + m_xControl->set_text(nRowIndex, pTarget->bCaseSensitive ? OUString("Yes") : OUString("No"), 3); + m_xControl->set_text(nRowIndex, pTarget->bWholeWords ? OUString("Yes") : OUString("No"), 4); +} + /*IMPL_LINK_NOARG(SfxAutoRedactDialog, LoadHdl, weld::Button&, void) { //TODO: Implement @@ -214,11 +247,75 @@ IMPL_LINK_NOARG(SfxAutoRedactDialog, AddHdl, weld::Button&, void) } } -/*IMPL_LINK_NOARG(SfxAutoRedactDialog, EditHdl, weld::Button&, void) +IMPL_LINK_NOARG(SfxAutoRedactDialog, EditHdl, weld::Button&, void) { - //TODO: Implement - //Reuse the Add Target dialog -}*/ + sal_Int32 nSelectedRow = m_xTargetsBox->get_selected_index(); + + // No selection, nothing to edit + if (nSelectedRow < 0) + return; + + // Only one entry should be selected for editing + if (m_xTargetsBox->get_selected_rows().size() > 1) + { + OUString sMsg( + "You have selected multiple targets, but only one target can be edited at once."); + //Warn the user about multiple selections + std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog( + getDialog(), VclMessageType::Error, VclButtonsType::Ok, sMsg)); + xBox->run(); + return; + } + + // Get the redaction target to be edited + RedactionTarget* pTarget + = reinterpret_cast<RedactionTarget*>(m_xTargetsBox->get_id(nSelectedRow).toInt64()); + + // Construct and run the edit target dialog + SfxAddTargetDialog aEditTargetDialog(getDialog(), pTarget->sName, pTarget->sType, + pTarget->sContent, pTarget->bCaseSensitive, + pTarget->bWholeWords); + + bool bIncomplete; + do + { + bIncomplete = false; + + if (aEditTargetDialog.run() != RET_OK) + return; + + if (aEditTargetDialog.getName().isEmpty() + || aEditTargetDialog.getType() == RedactionTargetType::REDACTION_TARGET_UNKNOWN + || aEditTargetDialog.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 (aEditTargetDialog.getName() != pTarget->sName + && m_xTargetsBox->GetTargetByName(aEditTargetDialog.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); + + // Update the redaction target + pTarget->sName = aEditTargetDialog.getName(); + pTarget->sType = aEditTargetDialog.getType(); + pTarget->sContent = aEditTargetDialog.getContent(); + pTarget->bCaseSensitive = aEditTargetDialog.isCaseSensitive(); + pTarget->bWholeWords = aEditTargetDialog.isWholeWords(); + + // And sync the targets box row with the actual target data + m_xTargetsBox->setRowData(nSelectedRow, pTarget); +} IMPL_LINK_NOARG(SfxAutoRedactDialog, DeleteHdl, weld::Button&, void) { @@ -280,7 +377,7 @@ SfxAutoRedactDialog::SfxAutoRedactDialog(weld::Window* pParent) //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_xEditBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, EditHdl)); m_xDeleteBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, DeleteHdl)); } @@ -312,6 +409,30 @@ SfxAddTargetDialog::SfxAddTargetDialog(weld::Window* pParent, const OUString& rN m_xName->select_region(0, rName.getLength()); } +SfxAddTargetDialog::SfxAddTargetDialog(weld::Window* pParent, const OUString& sName, + const RedactionTargetType& eTargetType, + const OUString& sContent, const bool& bCaseSensitive, + const bool& bWholeWords) + : 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(sName); + m_xName->select_region(0, sName.getLength()); + + m_xType->set_active_id(getTypeID(eTargetType)); + + m_xContent->set_text(sContent); + + m_xCaseSensitive->set_active(bCaseSensitive); + m_xWholeWords->set_active(bWholeWords); + + set_title("Edit Target"); +} + RedactionTargetType SfxAddTargetDialog::getType() const { OUString sTypeID = m_xType->get_active_id(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits