diff options
Diffstat (limited to 'svx/source/dialog/ClassificationDialog.cxx')
-rw-r--r-- | svx/source/dialog/ClassificationDialog.cxx | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/svx/source/dialog/ClassificationDialog.cxx b/svx/source/dialog/ClassificationDialog.cxx new file mode 100644 index 000000000000..e827ebc1d112 --- /dev/null +++ b/svx/source/dialog/ClassificationDialog.cxx @@ -0,0 +1,263 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * 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/. + * + */ + +#include <svx/ClassificationDialog.hxx> +#include <editeng/flditem.hxx> +#include <editeng/eeitem.hxx> +#include <editeng/section.hxx> +#include <editeng/editobj.hxx> +#include <svl/itemset.hxx> + +namespace svx { + +namespace { + +const SvxFieldItem* findField(editeng::Section const & rSection) +{ + for (SfxPoolItem const * pPool: rSection.maAttributes) + { + if (pPool->Which() == EE_FEATURE_FIELD) + return static_cast<const SvxFieldItem*>(pPool); + } + return nullptr; +} + +} // end anonymous namespace + +ClassificationDialog::ClassificationDialog(vcl::Window* pParent) + : ModalDialog(pParent, "AdvancedDocumentClassificationDialog", "svx/ui/classificationdialog.ui") + , maHelper(SfxObjectShell::Current()->getDocProperties()) + , maInternationalHelper(SfxObjectShell::Current()->getDocProperties(), /*bUseLocalizedPolicy*/ false) +{ + get(m_pEditWindow, "classificationEditWindow"); + get(m_pBoldButton, "boldButton"); + get(m_pClassificationListBox, "classificationCB"); + get(m_pInternationalClassificationListBox, "internationalClassificationCB"); + get(m_pMarkingListBox, "markingCB"); + get(m_pIntellectualPropertyPartNumberListBox, "intellectualPropertyPartNumberCB"); + get(m_pIntellectualPropertyPartListBox, "intellectualPropertyPartLB"); + get(m_pIntellectualPropertyPartAddButton, "intellectualPropertyPartAddButton"); + get(m_pIntellectualPropertyPartEdit, "intellectualPropertyPartEntry"); + + m_pBoldButton->SetClickHdl(LINK(this, ClassificationDialog, ButtonClicked)); + m_pIntellectualPropertyPartAddButton->SetClickHdl(LINK(this, ClassificationDialog, ButtonClicked)); + + m_pClassificationListBox->SetSelectHdl(LINK(this, ClassificationDialog, SelectClassificationHdl)); + for (const OUString& rName : maHelper.GetBACNames()) + m_pClassificationListBox->InsertEntry(rName); + m_pClassificationListBox->EnableAutoSize(true); + + m_pInternationalClassificationListBox->SetSelectHdl(LINK(this, ClassificationDialog, SelectClassificationHdl)); + for (const OUString& rName : maInternationalHelper.GetBACNames()) + m_pInternationalClassificationListBox->InsertEntry(rName); + m_pInternationalClassificationListBox->EnableAutoSize(true); + + m_pMarkingListBox->SetSelectHdl(LINK(this, ClassificationDialog, SelectMarkingHdl)); + for (const OUString& rName : maHelper.GetMarkings()) + m_pMarkingListBox->InsertEntry(rName); + m_pMarkingListBox->EnableAutoSize(true); + + m_pIntellectualPropertyPartNumberListBox->SetSelectHdl(LINK(this, ClassificationDialog, SelectIPPartNumbersHdl)); + for (const OUString& rName : maHelper.GetIntellectualPropertyPartNumbers()) + m_pIntellectualPropertyPartNumberListBox->InsertEntry(rName); + m_pIntellectualPropertyPartNumberListBox->EnableAutoSize(true); + + m_pIntellectualPropertyPartListBox->SetDoubleClickHdl(LINK(this, ClassificationDialog, DoubleClickIPPartHdl)); + for (const OUString& rName : maHelper.GetIntellectualPropertyParts()) + m_pIntellectualPropertyPartListBox->InsertEntry(rName); + m_pIntellectualPropertyPartListBox->EnableAutoSize(true); +} + +ClassificationDialog::~ClassificationDialog() +{ + disposeOnce(); +} + +void ClassificationDialog::dispose() +{ + m_pEditWindow.clear(); + m_pBoldButton.clear(); + m_pClassificationListBox.clear(); + m_pInternationalClassificationListBox.clear(); + m_pMarkingListBox.clear(); + m_pIntellectualPropertyPartListBox.clear(); + m_pIntellectualPropertyPartNumberListBox.clear(); + m_pIntellectualPropertyPartAddButton.clear(); + m_pIntellectualPropertyPartEdit.clear(); + + ModalDialog::dispose(); +} + +void ClassificationDialog::insertField(ClassificationType eType, OUString const & rString) +{ + ClassificationField aField(eType, rString); + m_pEditWindow->InsertField(SvxFieldItem(aField, EE_FEATURE_FIELD)); +} + +void ClassificationDialog::setupValues(std::vector<ClassificationResult> const & rInput) +{ + for (ClassificationResult const & rClassificationResult : rInput) + { + switch (rClassificationResult.meType) + { + case svx::ClassificationType::TEXT: + { + m_pEditWindow->pEdView->InsertText(rClassificationResult.msString); + } + break; + + case svx::ClassificationType::CATEGORY: + { + m_pClassificationListBox->SelectEntry(rClassificationResult.msString); + m_pInternationalClassificationListBox->SelectEntryPos(m_pClassificationListBox->GetSelectEntryPos()); + insertField(rClassificationResult.meType, rClassificationResult.msString); + } + break; + + case svx::ClassificationType::MARKING: + { + m_pMarkingListBox->SelectEntry(rClassificationResult.msString); + insertField(rClassificationResult.meType, rClassificationResult.msString); + } + break; + + case svx::ClassificationType::INTELLECTUAL_PROPERTY_PART: + { + insertField(rClassificationResult.meType, rClassificationResult.msString); + } + break; + + default: + break; + } + } +} + +std::vector<ClassificationResult> ClassificationDialog::getResult() +{ + std::vector<ClassificationResult> aClassificationResults; + + std::unique_ptr<EditTextObject> pEditText(m_pEditWindow->pEdEngine->CreateTextObject()); + + std::vector<editeng::Section> aSections; + pEditText->GetAllSections(aSections); + + for (editeng::Section const & rSection : aSections) + { + const SvxFieldItem* pFieldItem = findField(rSection); + + ESelection aSelection(rSection.mnParagraph, rSection.mnStart, rSection.mnParagraph, rSection.mnEnd); + OUString sString = m_pEditWindow->pEdEngine->GetText(aSelection); + + if (pFieldItem) + { + const ClassificationField* pClassificationField = dynamic_cast<const ClassificationField*>(pFieldItem->GetField()); + aClassificationResults.push_back({ pClassificationField->meType , sString, rSection.mnParagraph }); + } + else + { + aClassificationResults.push_back({ ClassificationType::TEXT, sString, rSection.mnParagraph }); + } + } + return aClassificationResults; +} + +IMPL_LINK(ClassificationDialog, SelectClassificationHdl, ListBox&, rBox, void) +{ + sal_Int32 nSelected = rBox.GetSelectEntryPos(); + if (nSelected >= 0) + { + std::unique_ptr<EditTextObject> pEditText(m_pEditWindow->pEdEngine->CreateTextObject()); + std::vector<editeng::Section> aSections; + pEditText->GetAllSections(aSections); + + for (editeng::Section const & rSection : aSections) + { + const SvxFieldItem* pFieldItem = findField(rSection); + if (pFieldItem) + { + const ClassificationField* pClassificationField = dynamic_cast<const ClassificationField*>(pFieldItem->GetField()); + if (pClassificationField && pClassificationField->meType == ClassificationType::CATEGORY) + { + m_pEditWindow->pEdView->SetSelection(ESelection(rSection.mnParagraph, rSection.mnStart, rSection.mnParagraph, rSection.mnEnd)); + } + } + } + + OUString aString = maHelper.GetBACNames()[nSelected]; + insertField(ClassificationType::CATEGORY, aString); + + m_pInternationalClassificationListBox->SelectEntryPos(nSelected); + m_pClassificationListBox->SelectEntryPos(nSelected); + } +} + +IMPL_LINK(ClassificationDialog, SelectMarkingHdl, ListBox&, rBox, void) +{ + sal_Int32 nSelected = rBox.GetSelectEntryPos(); + if (nSelected >= 0) + { + std::unique_ptr<EditTextObject> pEditText(m_pEditWindow->pEdEngine->CreateTextObject()); + std::vector<editeng::Section> aSections; + pEditText->GetAllSections(aSections); + + for (editeng::Section const & rSection : aSections) + { + const SvxFieldItem* pFieldItem = findField(rSection); + if (pFieldItem) + { + const ClassificationField* pClassificationField = dynamic_cast<const ClassificationField*>(pFieldItem->GetField()); + if (pClassificationField && pClassificationField->meType == ClassificationType::MARKING) + { + m_pEditWindow->pEdView->SetSelection(ESelection(rSection.mnParagraph, rSection.mnStart, rSection.mnParagraph, rSection.mnEnd)); + } + } + } + + OUString aString = maHelper.GetMarkings()[nSelected]; + insertField(ClassificationType::MARKING, aString); + } +} + +IMPL_LINK(ClassificationDialog, SelectIPPartNumbersHdl, ListBox&, rBox, void) +{ + sal_Int32 nSelected = rBox.GetSelectEntryPos(); + if (nSelected >= 0) + { + OUString sString = maHelper.GetIntellectualPropertyPartNumbers()[nSelected]; + m_pIntellectualPropertyPartEdit->SetText(m_pIntellectualPropertyPartEdit->GetText() + sString); + } +} + +IMPL_LINK(ClassificationDialog, DoubleClickIPPartHdl, ListBox&, rBox, void) +{ + sal_Int32 nSelected = rBox.GetSelectEntryPos(); + if (nSelected >= 0) + { + OUString sString = maHelper.GetIntellectualPropertyParts()[nSelected]; + m_pIntellectualPropertyPartEdit->SetText(m_pIntellectualPropertyPartEdit->GetText() + sString); + } +} + +IMPL_LINK(ClassificationDialog, ButtonClicked, Button*, pButton, void) +{ + if (pButton == m_pBoldButton) + { + m_pEditWindow->InvertSelectionWeight(); + } + else if (pButton == m_pIntellectualPropertyPartAddButton) + { + insertField(ClassificationType::INTELLECTUAL_PROPERTY_PART, m_pIntellectualPropertyPartEdit->GetText()); + } +} + +} // end sfx2 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |