summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/view/classificationcontroller.cxx206
1 files changed, 79 insertions, 127 deletions
diff --git a/sfx2/source/view/classificationcontroller.cxx b/sfx2/source/view/classificationcontroller.cxx
index b122fb669d92..93cbee5e8193 100644
--- a/sfx2/source/view/classificationcontroller.cxx
+++ b/sfx2/source/view/classificationcontroller.cxx
@@ -29,6 +29,8 @@
#include <comphelper/dispatchcommand.hxx>
#include <comphelper/configurationlistener.hxx>
+#include <officecfg/Office/Common.hxx>
+
using namespace com::sun::star;
namespace sfx2
@@ -58,7 +60,7 @@ class ClassificationCategoriesController : public ClassificationCategoriesContro
rtl::Reference<comphelper::ConfigurationListener> m_xListener;
ClassificationPropertyListener m_aPropertyListener;
- DECL_LINK(SelectHdl, ListBox&, void);
+ DECL_STATIC_LINK(ClassificationCategoriesController, SelectHdl, ListBox&, void);
public:
explicit ClassificationCategoriesController(const uno::Reference<uno::XComponentContext>& rContext);
@@ -83,8 +85,8 @@ public:
/// Classification control is the parent of all widgets that belongs to ClassificationCategoriesController.
class SAL_WARN_UNUSED ClassificationControl : public vcl::Window
{
- std::map<SfxClassificationPolicyType, VclPtr<FixedText>> m_pLabels;
- std::map<SfxClassificationPolicyType, VclPtr<ListBox>> m_pCategories;
+ VclPtr<FixedText> m_pLabel;
+ VclPtr<ListBox> m_pCategory;
void SetOptimalSize();
void DataChanged(const DataChangedEvent& rEvent) override;
@@ -93,11 +95,29 @@ public:
~ClassificationControl() override;
void dispose() override;
void Resize() override;
- const VclPtr<ListBox>& getCategories(SfxClassificationPolicyType eType);
- std::size_t getLabelsSize();
- OUString getCategoryType(ListBox& rCategory);
+ const VclPtr<ListBox>& getCategory()
+ {
+ return m_pCategory;
+ }
};
+namespace
+{
+
+SfxClassificationPolicyType getPolicyType()
+{
+ sal_Int32 nPolicyTypeNumber = officecfg::Office::Common::Classification::Policy::get();
+ auto eType = static_cast<SfxClassificationPolicyType>(nPolicyTypeNumber);
+ return eType;
+}
+
+OUString getCategoryType()
+{
+ return SfxClassificationHelper::policyTypeToString(getPolicyType());
+}
+
+} // end anonymous namespace
+
ClassificationPropertyListener::ClassificationPropertyListener(const rtl::Reference<comphelper::ConfigurationListener>& xListener, ClassificationCategoriesController& rController)
: ClassificationPropertyListenerBase(xListener, "WritePath")
, m_rController(rController)
@@ -131,11 +151,7 @@ sal_Bool ClassificationCategoriesController::supportsService(const OUString& rSe
uno::Sequence<OUString> ClassificationCategoriesController::getSupportedServiceNames()
{
- uno::Sequence<OUString> aServices
- {
- "com.sun.star.frame.ToolbarController"
- };
- return aServices;
+ return { "com.sun.star.frame.ToolbarController" };
}
void ClassificationCategoriesController::dispose()
@@ -155,23 +171,18 @@ uno::Reference<awt::XWindow> ClassificationCategoriesController::createItemWindo
if (pToolbar)
{
m_pClassification = VclPtr<ClassificationControl>::Create(pToolbar);
- for (size_t i = m_pClassification->getLabelsSize(); i > 0; --i)
- {
- auto eType = static_cast<SfxClassificationPolicyType>(i);
- m_pClassification->getCategories(eType)->SetSelectHdl(LINK(this, ClassificationCategoriesController, SelectHdl));
- }
+ m_pClassification->getCategory()->SetSelectHdl(LINK(this, ClassificationCategoriesController, SelectHdl));
}
return uno::Reference<awt::XWindow>(VCLUnoHelper::GetInterface(m_pClassification));
}
-IMPL_LINK(ClassificationCategoriesController, SelectHdl, ListBox&, rCategory, void)
+IMPL_STATIC_LINK(ClassificationCategoriesController, SelectHdl, ListBox&, rCategory, void)
{
OUString aEntry = rCategory.GetSelectEntry();
- OUString aType = m_pClassification->getCategoryType(rCategory);
- uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
- {
+ OUString aType = getCategoryType();
+ uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence({
{"Name", uno::makeAny(aEntry)},
{"Type", uno::makeAny(aType)},
}));
@@ -188,44 +199,28 @@ void ClassificationCategoriesController::statusChanged(const frame::FeatureState
return;
SfxClassificationHelper aHelper(pObjectShell->getDocProperties());
- for (size_t i = m_pClassification->getLabelsSize(); i > 0; --i)
+
+ VclPtr<ListBox> pCategories = m_pClassification->getCategory();
+ if (pCategories->GetEntryCount() == 0)
{
- auto eType = static_cast<SfxClassificationPolicyType>(i);
- VclPtr<ListBox> pCategories = m_pClassification->getCategories(eType);
- if (pCategories->GetEntryCount() == 0)
- {
- std::vector<OUString> aNames = aHelper.GetBACNames();
- for (const OUString& rName : aNames)
- pCategories->InsertEntry(rName);
- // Normally VclBuilder::makeObject() does this.
- pCategories->EnableAutoSize(true);
- }
+ std::vector<OUString> aNames = aHelper.GetBACNames();
+ for (const OUString& rName : aNames)
+ pCategories->InsertEntry(rName);
+ // Normally VclBuilder::makeObject() does this.
+ pCategories->EnableAutoSize(true);
}
// Restore state based on the doc. model.
- for (size_t i = m_pClassification->getLabelsSize(); i > 0; --i)
+ const OUString& rCategoryName = aHelper.GetBACName(getPolicyType());
+ if (!rCategoryName.isEmpty())
{
- auto eType = static_cast<SfxClassificationPolicyType>(i);
- const OUString& rCategoryName = aHelper.GetBACName(eType);
- if (!rCategoryName.isEmpty())
- {
- VclPtr<ListBox> pCategories = m_pClassification->getCategories(eType);
- pCategories->SelectEntry(rCategoryName);
- }
+ m_pClassification->getCategory()->SelectEntry(rCategoryName);
}
}
void ClassificationCategoriesController::removeEntries()
{
- if (m_pClassification)
- {
- for (size_t i = m_pClassification->getLabelsSize(); i > 0; --i)
- {
- auto eType = static_cast<SfxClassificationPolicyType>(i);
- VclPtr<ListBox> pCategories = m_pClassification->getCategories(eType);
- pCategories->Clear();
- }
- }
+ m_pClassification->getCategory()->Clear();
}
// WB_NOLABEL means here that the control won't be replaced with a label
@@ -233,38 +228,30 @@ void ClassificationCategoriesController::removeEntries()
ClassificationControl::ClassificationControl(vcl::Window* pParent)
: Window(pParent, WB_DIALOGCONTROL | WB_NOLABEL)
{
- m_pLabels[SfxClassificationPolicyType::IntellectualProperty] = VclPtr<FixedText>::Create(this, WB_CENTER);
- m_pLabels[SfxClassificationPolicyType::NationalSecurity] = VclPtr<FixedText>::Create(this, WB_CENTER);
- m_pLabels[SfxClassificationPolicyType::ExportControl] = VclPtr<FixedText>::Create(this, WB_CENTER);
- for (auto& rPair : m_pLabels)
+ m_pLabel = VclPtr<FixedText>::Create(this, WB_CENTER);
+ m_pCategory = VclPtr<ListBox>::Create(this, WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_DROPDOWN|WB_SIMPLEMODE);
+
+ OUString aText;
+ switch (getPolicyType())
{
- OUString aText;
- switch (rPair.first)
- {
- case SfxClassificationPolicyType::IntellectualProperty:
- aText = SfxResId(STR_CLASSIFIED_INTELLECTUAL_PROPERTY);
- break;
- case SfxClassificationPolicyType::NationalSecurity:
- aText = SfxResId(STR_CLASSIFIED_NATIONAL_SECURITY);
- break;
- case SfxClassificationPolicyType::ExportControl:
- aText = SfxResId(STR_CLASSIFIED_EXPORT_CONTROL);
- break;
- }
- auto& pLabel = rPair.second;
- Size aTextSize(pLabel->GetTextWidth(aText), pLabel->GetTextHeight());
- // Padding.
- aTextSize.Width() += 12;
- pLabel->SetText(aText);
- pLabel->SetSizePixel(aTextSize);
- pLabel->Show();
+ case SfxClassificationPolicyType::IntellectualProperty:
+ aText = SfxResId(STR_CLASSIFIED_INTELLECTUAL_PROPERTY);
+ break;
+ case SfxClassificationPolicyType::NationalSecurity:
+ aText = SfxResId(STR_CLASSIFIED_NATIONAL_SECURITY);
+ break;
+ case SfxClassificationPolicyType::ExportControl:
+ aText = SfxResId(STR_CLASSIFIED_EXPORT_CONTROL);
+ break;
}
+ Size aTextSize(m_pLabel->GetTextWidth(aText), m_pLabel->GetTextHeight());
+ // Padding.
+ aTextSize.Width() += 12;
+ m_pLabel->SetText(aText);
+ m_pLabel->SetSizePixel(aTextSize);
+ m_pLabel->Show();
- m_pCategories[SfxClassificationPolicyType::IntellectualProperty] = VclPtr<ListBox>::Create(this, WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_DROPDOWN|WB_SIMPLEMODE);
- m_pCategories[SfxClassificationPolicyType::NationalSecurity] = VclPtr<ListBox>::Create(this, WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_DROPDOWN|WB_SIMPLEMODE);
- m_pCategories[SfxClassificationPolicyType::ExportControl] = VclPtr<ListBox>::Create(this, WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_DROPDOWN|WB_SIMPLEMODE);
- for (auto& rPair : m_pCategories)
- rPair.second->Show();
+ m_pCategory->Show();
SetOptimalSize();
}
@@ -276,10 +263,8 @@ ClassificationControl::~ClassificationControl()
void ClassificationControl::dispose()
{
- for (auto& rPair : m_pLabels)
- rPair.second.disposeAndClear();
- for (auto& rPair : m_pCategories)
- rPair.second.disposeAndClear();
+ m_pLabel.disposeAndClear();
+ m_pCategory.disposeAndClear();
vcl::Window::dispose();
}
@@ -287,63 +272,30 @@ void ClassificationControl::Resize()
{
// Give the label what it wants, and the remaining size to the listbox.
Size aSize(GetOutputSizePixel());
- long nXPosition = 0;
- for (size_t i = m_pLabels.size(); i > 0; --i)
- {
- auto eType = static_cast<SfxClassificationPolicyType>(i);
- auto& pLabel = m_pLabels[eType];
- long nWLabel = pLabel->GetOutputSizePixel().Width();
- long nW = aSize.Width() / m_pLabels.size();
- long nH = aSize.Height();
-
- long nPrefHeight = pLabel->get_preferred_size().Height();
- long nOffset = (nH - nPrefHeight) / 2;
- pLabel->SetPosSizePixel(Point(nXPosition, nOffset), Size(nWLabel, nPrefHeight));
-
- auto& pCategories = m_pCategories[eType];
- nPrefHeight = pCategories->get_preferred_size().Height();
- nOffset = (nH - nPrefHeight) / 2;
- pCategories->SetPosSizePixel(Point(nXPosition + nWLabel, nOffset), Size(nW - nWLabel, nPrefHeight));
- nXPosition += nW;
- }
-}
-
-const VclPtr<ListBox>& ClassificationControl::getCategories(SfxClassificationPolicyType eType)
-{
- return m_pCategories[eType];
-}
-std::size_t ClassificationControl::getLabelsSize()
-{
- return m_pLabels.size();
-}
+ long nWLabel = m_pLabel->GetOutputSizePixel().Width();
+ long nW = aSize.Width();
+ long nH = aSize.Height();
-OUString ClassificationControl::getCategoryType(ListBox& rCategory)
-{
- OUString aRet;
-
- auto it = std::find_if(m_pCategories.begin(), m_pCategories.end(), [&rCategory](const std::pair<SfxClassificationPolicyType, VclPtr<ListBox>>& rPair)
- {
- return rPair.second.get() == &rCategory;
- });
- if (it != m_pCategories.end())
- aRet = SfxClassificationHelper::policyTypeToString(it->first);
+ long nPrefHeight = m_pLabel->get_preferred_size().Height();
+ long nOffset = (nH - nPrefHeight) / 2;
+ m_pLabel->SetPosSizePixel(Point(0, nOffset), Size(nWLabel, nPrefHeight));
- return aRet;
+ nPrefHeight = m_pCategory->get_preferred_size().Height();
+ nOffset = (nH - nPrefHeight) / 2;
+ m_pCategory->SetPosSizePixel(Point(0 + nWLabel, nOffset), Size(nW - nWLabel, nPrefHeight));
}
void ClassificationControl::SetOptimalSize()
{
// Same as SvxColorDockingWindow.
- const Size aLogicalAttrSize(150 * m_pLabels.size(), 0);
+ const Size aLogicalAttrSize(150, 0);
Size aSize(LogicToPixel(aLogicalAttrSize,MapUnit::MapAppFont));
- auto& pLabel = m_pLabels[SfxClassificationPolicyType::IntellectualProperty];
- auto& pCategories = m_pCategories[SfxClassificationPolicyType::IntellectualProperty];
- Point aPosition = pCategories->GetPosPixel();
+ Point aPosition = m_pCategory->GetPosPixel();
- aSize.Height() = std::max(aSize.Height(), pLabel->get_preferred_size().Height());
- aSize.Height() = std::max(aSize.Height(), pCategories->get_preferred_size().Height());
+ aSize.Height() = std::max(aSize.Height(), m_pLabel->get_preferred_size().Height());
+ aSize.Height() = std::max(aSize.Height(), m_pCategory->get_preferred_size().Height());
aSize.Width() = aPosition.X() + aSize.Width();