sfx2/inc/autoredactdialog.hxx | 14 ---- sfx2/source/doc/autoredactdialog.cxx | 120 ++++++++++++++--------------------- 2 files changed, 52 insertions(+), 82 deletions(-)
New commits: commit 16772ff18d04af5b91d00075841b967597fae595 Author: Muhammet Kara <muhammet.k...@collabora.com> AuthorDate: Fri Aug 23 20:29:37 2019 +0300 Commit: Muhammet Kara <muhammet.k...@collabora.com> CommitDate: Fri Aug 23 21:35:27 2019 +0200 AutoRedaction: Adapt EditHdl And do some clean-up [NO-FORWARD-PORT] Change-Id: I8fec2acd38e0f160b22db20f6d9adc585b67c13c Reviewed-on: https://gerrit.libreoffice.org/78039 Reviewed-by: Muhammet Kara <muhammet.k...@collabora.com> Tested-by: Muhammet Kara <muhammet.k...@collabora.com> diff --git a/sfx2/inc/autoredactdialog.hxx b/sfx2/inc/autoredactdialog.hxx index 5af176a6f7ce..90e5ec6ad3d5 100644 --- a/sfx2/inc/autoredactdialog.hxx +++ b/sfx2/inc/autoredactdialog.hxx @@ -48,7 +48,7 @@ class TargetsTable : public SvSimpleTable public: TargetsTable(SvSimpleTableContainer& rParent); void InsertTarget(RedactionTarget* pTarget); - void SelectByName(const OUString& sName); + void InsertTargetAtPos(RedactionTarget* pTarget, const sal_uLong& nPos); RedactionTarget* GetTargetByName(const OUString& sName); OUString GetNameProposal(); }; @@ -67,7 +67,6 @@ enum class StartFileDialogType class SFX2_DLLPUBLIC SfxAutoRedactDialog : public SfxModalDialog { SfxObjectShellLock m_xDocShell; - //std::vector<std::pair<RedactionTarget*, OUString>> m_aTableTargets; std::unique_ptr<sfx2::FileDialogHelper> m_pFileDlg; bool m_bIsValidState; bool m_bTargetsCopied; @@ -84,16 +83,14 @@ class SFX2_DLLPUBLIC SfxAutoRedactDialog : public SfxModalDialog DECL_LINK(Load, Button*, void); DECL_LINK(Save, Button*, void); DECL_LINK(AddHdl, Button*, void); - //DECL_LINK(EditHdl, Button*, void); + DECL_LINK(EditHdl, Button*, void); DECL_LINK(DeleteHdl, Button*, void); DECL_LINK(LoadHdl, sfx2::FileDialogHelper*, void); DECL_LINK(SaveHdl, sfx2::FileDialogHelper*, void); void StartFileDialog(StartFileDialogType nType, const OUString& rTitle); - /// Carry out proper addition both to the targets box, and to the tabletargets vector. - /*void addTarget(RedactionTarget* pTarget);*/ - /// Clear all targets both visually and from the targets vector + /// Clear all targets both visually and from the memory void clearTargets(); public: @@ -101,11 +98,6 @@ public: virtual ~SfxAutoRedactDialog() override; virtual void dispose() override; - /// Check if the dialog has any valid redaction targets. - //bool hasTargets() const; - /// Check if the dialog is in a valid state. - //bool isValidState() const { return m_bIsValidState; } - /** Copies targets vector * Does a shallow copy. * Returns true if successful. diff --git a/sfx2/source/doc/autoredactdialog.cxx b/sfx2/source/doc/autoredactdialog.cxx index 040fb3a9dacc..cbeb8a8705a1 100644 --- a/sfx2/source/doc/autoredactdialog.cxx +++ b/sfx2/source/doc/autoredactdialog.cxx @@ -150,13 +150,34 @@ void TargetsTable::InsertTarget(RedactionTarget* pTarget) InsertEntryToColumn(sColumnData, TREELIST_APPEND, 0xffff, pTarget); } -void TargetsTable::SelectByName(const OUString& sName) +void TargetsTable::InsertTargetAtPos(RedactionTarget* pTarget, const sal_uLong& nPos) { - SvTreeListEntry* pEntry = GetRowByTargetName(sName); - if (!pEntry) + if (!pTarget) + { + SAL_WARN("sfx.doc", "pTarget is null in TargetsTable::InsertTarget()"); return; + } + + // Check if the name is empty or invalid (clashing with another entry's name) + if (pTarget->sName.isEmpty() || GetRowByTargetName(pTarget->sName) != nullptr) + { + SAL_WARN("sfx.doc", "Repetitive or empty target name in TargetsTable::InsertTarget()"); + pTarget->sName = GetNameProposal(); + } + + OUString sContent = pTarget->sContent; + + if (pTarget->sType == RedactionTargetType::REDACTION_TARGET_PREDEFINED) + { + //selection_num;selection_name + sContent = sContent.getToken(1, ';'); + } - Select(pEntry); + OUString sColumnData = pTarget->sName + "\t" + getTypeName(pTarget->sType) + "\t" + sContent + + "\t" + (pTarget->bCaseSensitive ? OUString("Yes") : OUString("No")) + + "\t" + (pTarget->bWholeWords ? OUString("Yes") : OUString("No")); + + InsertEntryToColumn(sColumnData, nPos, 0xffff, pTarget); } RedactionTarget* TargetsTable::GetTargetByName(const OUString& sName) @@ -191,23 +212,6 @@ OUString TargetsTable::GetNameProposal() return sDefaultTargetName + " " + OUString::number(nHighestTargetId + 1); } -/*void TargetsTable::setRowData(const int& nRowIndex, const RedactionTarget* pTarget) -{ - OUString sContent = pTarget->sContent; - - if (pTarget->sType == RedactionTargetType::REDACTION_TARGET_PREDEFINED) - { - //selection_num;selection_name - sContent = sContent.getToken(1, ';'); - } - - m_xControl->set_text(nRowIndex, pTarget->sName, 0); - m_xControl->set_text(nRowIndex, getTypeName(pTarget->sType), 1); - m_xControl->set_text(nRowIndex, 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, Load, Button*, void) { //Load a targets list from a previously saved file (a json file?) @@ -260,41 +264,38 @@ IMPL_LINK_NOARG(SfxAutoRedactDialog, AddHdl, Button*, void) m_pTargetsBox->InsertTarget(redactiontarget); } -/*IMPL_LINK_NOARG(SfxAutoRedactDialog, EditHdl, Button*, void) +IMPL_LINK_NOARG(SfxAutoRedactDialog, EditHdl, Button*, void) { - sal_Int32 nSelectedRow = m_xTargetsBox->get_selected_index(); + SvTreeListEntry* pEntry = m_pTargetsBox->FirstSelected(); // No selection, nothing to edit - if (nSelectedRow < 0) + if (pEntry == nullptr) return; // Only one entry should be selected for editing - if (m_xTargetsBox->get_selected_rows().size() > 1) + if (m_pTargetsBox->GetSelectionCount() > 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(); + ScopedVclPtrInstance<WarningBox>(this, MessBoxStyle::Ok, sMsg)->Execute(); return; } - // Get the redaction target to be edited - RedactionTarget* pTarget - = reinterpret_cast<RedactionTarget*>(m_xTargetsBox->get_id(nSelectedRow).toInt64()); + // Get the redaction target to be edited, and its position + RedactionTarget* pTarget = static_cast<RedactionTarget*>(pEntry->GetUserData()); + sal_uLong nPos = m_pTargetsBox->GetEntryPos(pEntry); // Construct and run the edit target dialog - SfxAddTargetDialog aEditTargetDialog(getDialog(), pTarget->sName, pTarget->sType, - pTarget->sContent, pTarget->bCaseSensitive, - pTarget->bWholeWords); + SfxAddTargetDialog aEditTargetDialog(this, pTarget->sName, pTarget->sType, pTarget->sContent, + pTarget->bCaseSensitive, pTarget->bWholeWords); bool bIncomplete; do { bIncomplete = false; - if (aEditTargetDialog.run() != RET_OK) + if (aEditTargetDialog.Execute() != RET_OK) return; if (aEditTargetDialog.getName().isEmpty() @@ -302,19 +303,16 @@ IMPL_LINK_NOARG(SfxAutoRedactDialog, AddHdl, Button*, void) || aEditTargetDialog.getContent().isEmpty()) { bIncomplete = true; - std::unique_ptr<weld::MessageDialog> xBox( - Application::CreateMessageDialog(getDialog(), VclMessageType::Warning, - VclButtonsType::Ok, "All fields are required")); - xBox->run(); + ScopedVclPtrInstance<WarningBox>(this, MessBoxStyle::Ok, "All fields are required") + ->Execute(); } else if (aEditTargetDialog.getName() != pTarget->sName - && m_xTargetsBox->GetTargetByName(aEditTargetDialog.getName())) + && m_pTargetsBox->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(); + ScopedVclPtrInstance<WarningBox>(this, MessBoxStyle::Ok, + "There is already a target with this name") + ->Execute(); } } while (bIncomplete); @@ -327,8 +325,12 @@ IMPL_LINK_NOARG(SfxAutoRedactDialog, AddHdl, Button*, void) pTarget->bWholeWords = aEditTargetDialog.isWholeWords(); // And sync the targets box row with the actual target data - m_xTargetsBox->setRowData(nSelectedRow, pTarget); -}*/ + m_pTargetsBox->RemoveEntry(pEntry); + m_pTargetsBox->InsertTargetAtPos(pTarget, nPos); + + m_pTargetsBox->SelectAll(false); + m_pTargetsBox->SelectRow(nPos); +} IMPL_LINK_NOARG(SfxAutoRedactDialog, DeleteHdl, Button*, void) { @@ -520,24 +522,6 @@ void SfxAutoRedactDialog::StartFileDialog(StartFileDialogType nType, const OUStr m_pFileDlg->StartExecuteModal(aDlgClosedLink); } -/*void SfxAutoRedactDialog::addTarget(RedactionTarget* pTarget) -{ - // Only the visual/display part - m_xTargetsBox->InsertTarget(pTarget); - - // Actually add to the targets vector - if (m_xTargetsBox->GetTargetByName(pTarget->sName)) - m_aTableTargets.emplace_back(pTarget, pTarget->sName); - else - { - std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog( - getDialog(), VclMessageType::Warning, VclButtonsType::Ok, - "An error occurred while adding new target. Please report this incident.")); - xBox->run(); - delete pTarget; - } -}*/ - void SfxAutoRedactDialog::clearTargets() { SvTreeListEntry* pEntry = m_pTargetsBox->First(); @@ -573,6 +557,7 @@ SfxAutoRedactDialog::SfxAutoRedactDialog(vcl::Window* pParent) m_pSaveBtn->SetClickHdl(LINK(this, SfxAutoRedactDialog, Save)); m_pDeleteBtn->SetClickHdl(LINK(this, SfxAutoRedactDialog, DeleteHdl)); m_pAddBtn->SetClickHdl(LINK(this, SfxAutoRedactDialog, AddHdl)); + m_pEditBtn->SetClickHdl(LINK(this, SfxAutoRedactDialog, EditHdl)); // Can be used to remmeber the last set of redaction targets? /*OUString sExtraData; @@ -614,13 +599,6 @@ SfxAutoRedactDialog::SfxAutoRedactDialog(vcl::Window* pParent) //TODO: Warn the user with a message box } }*/ - - // Handler connections - /*m_xLoadBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, Load)); - m_xSaveBtn->connect_clicked(LINK(this, SfxAutoRedactDialog, Save)); - 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() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits