summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2017-08-04 16:10:43 +0200
committerTomaž Vajngerl <quikee@gmail.com>2017-08-07 14:27:55 +0200
commit3e493d337819204ca9c7302efbd7b34c282956a2 (patch)
tree337dcfd80a8ba7961872a3c73cb3504421a35809 /sfx2
parent5ebd60e7d912704ff9e2936e673ffaa6f39a9a2f (diff)
TSCP: simplify toolbar to only one combo box + configuration
Previously we had 3 comboboxes each for different classification policies. This simplifies it to just use one classification policy and which policy it will be used can be set in LO configuration. By default this is the "IntellectualProperty" policy, which is the one most users will probably be interested in. Change-Id: I1fc69c2123b04ecf58a6775e5bcda3b5316414a3 Reviewed-on: https://gerrit.libreoffice.org/40768 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
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();