[Libreoffice-commits] core.git: include/sfx2 sfx2/source
Miklos Vajna
vmiklos at collabora.co.uk
Thu May 19 17:11:14 UTC 2016
include/sfx2/classificationhelper.hxx | 6 -
include/sfx2/sfx.hrc | 2
sfx2/source/view/classificationcontroller.cxx | 118 ++++++++++++++++----------
sfx2/source/view/view.src | 11 ++
4 files changed, 91 insertions(+), 46 deletions(-)
New commits:
commit 16a8a52c84b8fd0c062fe8915838e2fbcd730cdf
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu May 19 17:26:57 2016 +0200
sfx2 classification toolbar: add listboxes for all policy types
Previously only a single listbox was shown, but
SfxClassificationPolicyType has 3 elements.
Change-Id: Id51b73467ff4e85a1cef3e1aa71f636ae7c7afb9
Reviewed-on: https://gerrit.libreoffice.org/25161
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
diff --git a/include/sfx2/classificationhelper.hxx b/include/sfx2/classificationhelper.hxx
index 6497d08..cc7a66f 100644
--- a/include/sfx2/classificationhelper.hxx
+++ b/include/sfx2/classificationhelper.hxx
@@ -36,9 +36,9 @@ enum class SfxClassificationCheckPasteResult
/// Specifies a policy type, to be used with SetBACName(). Getters always use IntellectualProperty for now.
enum class SfxClassificationPolicyType
{
- ExportControl,
- NationalSecurity,
- IntellectualProperty
+ ExportControl = 1,
+ NationalSecurity = 2,
+ IntellectualProperty = 3
};
/// Shared code to handle Business Authorization Identification and Labeling Scheme (BAILS) properties.
diff --git a/include/sfx2/sfx.hrc b/include/sfx2/sfx.hrc
index 9309cd3..0c0921d 100644
--- a/include/sfx2/sfx.hrc
+++ b/include/sfx2/sfx.hrc
@@ -157,6 +157,8 @@
#define STR_TARGET_DOC_NOT_CLASSIFIED (RID_SFX_START+132)
#define STR_DOC_CLASSIFICATION_TOO_LOW (RID_SFX_START+133)
#define STR_CLASSIFIED_INTELLECTUAL_PROPERTY (RID_SFX_START+134)
+#define STR_CLASSIFIED_NATIONAL_SECURITY (RID_SFX_START+135)
+#define STR_CLASSIFIED_EXPORT_CONTROL (RID_SFX_START+136)
#define STR_ACCTITLE_PRODUCTIVITYTOOLS (RID_SFX_START+157)
#define SFX_THUMBNAIL_TEXT (RID_SFX_START+158)
diff --git a/sfx2/source/view/classificationcontroller.cxx b/sfx2/source/view/classificationcontroller.cxx
index b1f8310..6ac651c 100644
--- a/sfx2/source/view/classificationcontroller.cxx
+++ b/sfx2/source/view/classificationcontroller.cxx
@@ -84,8 +84,8 @@ public:
/// Classification control is the parent of all widgets that belongs to ClassificationCategoriesController.
class SAL_WARN_UNUSED ClassificationControl : public vcl::Window
{
- VclPtr<FixedText> m_pLabel;
- VclPtr<ListBox> m_pCategories;
+ std::map<SfxClassificationPolicyType, VclPtr<FixedText>> m_pLabels;
+ std::map<SfxClassificationPolicyType, VclPtr<ListBox>> m_pCategories;
void SetOptimalSize();
virtual void DataChanged(const DataChangedEvent& rEvent) override;
@@ -94,7 +94,7 @@ public:
virtual ~ClassificationControl();
virtual void dispose() override;
virtual void Resize() override;
- VclPtr<ListBox> getCategories();
+ VclPtr<ListBox> getCategories(SfxClassificationPolicyType eType);
};
ClassificationPropertyListener::ClassificationPropertyListener(const rtl::Reference<comphelper::ConfigurationListener>& xListener, ClassificationCategoriesController& rController)
@@ -158,15 +158,15 @@ uno::Reference<awt::XWindow> ClassificationCategoriesController::createItemWindo
if (pToolbar)
{
m_pClassification = VclPtr<ClassificationControl>::Create(pToolbar);
- m_pClassification->getCategories()->SetSelectHdl(LINK(this, ClassificationCategoriesController, SelectHdl));
+ m_pClassification->getCategories(SfxClassificationPolicyType::IntellectualProperty)->SetSelectHdl(LINK(this, ClassificationCategoriesController, SelectHdl));
}
return uno::Reference<awt::XWindow>(VCLUnoHelper::GetInterface(m_pClassification));
}
-IMPL_LINK_NOARG_TYPED(ClassificationCategoriesController, SelectHdl, ListBox&, void)
+IMPL_LINK_TYPED(ClassificationCategoriesController, SelectHdl, ListBox&, rCategory, void)
{
- OUString aEntry = m_pClassification->getCategories()->GetSelectEntry();
+ OUString aEntry = rCategory.GetSelectEntry();
uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence(
{
{"Name", uno::makeAny(aEntry)},
@@ -184,43 +184,63 @@ void ClassificationCategoriesController::statusChanged(const frame::FeatureState
return;
SfxClassificationHelper aHelper(pObjectShell->getDocProperties());
- if (m_pClassification->getCategories()->GetEntryCount() == 0)
+ VclPtr<ListBox> pCategories = m_pClassification->getCategories(SfxClassificationPolicyType::IntellectualProperty);
+ if (pCategories->GetEntryCount() == 0)
{
std::vector<OUString> aNames = aHelper.GetBACNames();
for (const OUString& rName : aNames)
- m_pClassification->getCategories()->InsertEntry(rName);
+ pCategories->InsertEntry(rName);
// Normally VclBuilder::makeObject() does this.
- m_pClassification->getCategories()->EnableAutoSize(true);
+ pCategories->EnableAutoSize(true);
}
// Restore state based on the doc. model.
const OUString& rCategoryName = aHelper.GetBACName();
if (!rCategoryName.isEmpty())
- m_pClassification->getCategories()->SelectEntry(rCategoryName);
+ pCategories->SelectEntry(rCategoryName);
}
void ClassificationCategoriesController::removeEntries()
{
if (m_pClassification)
- m_pClassification->getCategories()->Clear();
+ m_pClassification->getCategories(SfxClassificationPolicyType::IntellectualProperty)->Clear();
}
ClassificationControl::ClassificationControl(vcl::Window* pParent)
: Window(pParent, WB_DIALOGCONTROL)
- , m_pLabel(nullptr)
- , m_pCategories(nullptr)
{
- OUString aText = SfxResId(STR_CLASSIFIED_INTELLECTUAL_PROPERTY);
- m_pLabel = VclPtr<FixedText>::Create(this);
- Size aTextSize(m_pLabel->GetTextWidth(aText), m_pLabel->GetTextHeight());
- // Padding.
- aTextSize.Width() += 6;
- m_pLabel->SetText(aText);
- m_pLabel->SetSizePixel(aTextSize);
- m_pLabel->Show();
-
- m_pCategories = VclPtr<ListBox>::Create(this, WB_CLIPCHILDREN|WB_LEFT|WB_VCENTER|WB_3DLOOK|WB_DROPDOWN|WB_SIMPLEMODE);
- m_pCategories->Show();
+ 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)
+ {
+ 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();
+ }
+
+ 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();
SetOptimalSize();
}
@@ -232,8 +252,10 @@ ClassificationControl::~ClassificationControl()
void ClassificationControl::dispose()
{
- m_pLabel.disposeAndClear();
- m_pCategories.disposeAndClear();
+ for (auto& rPair : m_pLabels)
+ rPair.second.disposeAndClear();
+ for (auto& rPair : m_pCategories)
+ rPair.second.disposeAndClear();
vcl::Window::dispose();
}
@@ -241,34 +263,44 @@ void ClassificationControl::Resize()
{
// Give the label what it wants, and the remaining size to the listbox.
Size aSize(GetOutputSizePixel());
- long nWLabel = m_pLabel->GetOutputSizePixel().Width();
- long nW = aSize.Width();
- long nH = aSize.Height();
-
- long nPrefHeight = m_pLabel->get_preferred_size().Height();
- long nOffset = (nH - nPrefHeight) / 2;
- m_pLabel->SetPosSizePixel(Point(0, nOffset), Size(nWLabel, nPrefHeight));
-
- nPrefHeight = m_pCategories->get_preferred_size().Height();
- nOffset = (nH - nPrefHeight) / 2;
- m_pCategories->SetPosSizePixel(Point(nWLabel, nOffset), Size(nW - nWLabel, nPrefHeight));
+ 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;
+ }
}
-VclPtr<ListBox> ClassificationControl::getCategories()
+VclPtr<ListBox> ClassificationControl::getCategories(SfxClassificationPolicyType eType)
{
- return m_pCategories;
+ return m_pCategories[eType];
}
void ClassificationControl::SetOptimalSize()
{
// Same as SvxColorDockingWindow.
- const Size aLogicalAttrSize(150, 0);
+ const Size aLogicalAttrSize(150 * m_pLabels.size(), 0);
Size aSize(LogicToPixel(aLogicalAttrSize,MAP_APPFONT));
- Point aPosition = m_pCategories->GetPosPixel();
+ auto& pLabel = m_pLabels[SfxClassificationPolicyType::IntellectualProperty];
+ auto& pCategories = m_pCategories[SfxClassificationPolicyType::IntellectualProperty];
+ Point aPosition = pCategories->GetPosPixel();
- aSize.Height() = std::max(aSize.Height(), m_pLabel->get_preferred_size().Height());
- aSize.Height() = std::max(aSize.Height(), m_pCategories->get_preferred_size().Height());
+ aSize.Height() = std::max(aSize.Height(), pLabel->get_preferred_size().Height());
+ aSize.Height() = std::max(aSize.Height(), pCategories->get_preferred_size().Height());
aSize.Width() = aPosition.X() + aSize.Width();
diff --git a/sfx2/source/view/view.src b/sfx2/source/view/view.src
index 787f527..16b3e59 100644
--- a/sfx2/source/view/view.src
+++ b/sfx2/source/view/view.src
@@ -111,6 +111,17 @@ String STR_CLASSIFIED_INTELLECTUAL_PROPERTY
Text [ en-US ] = "Intellectual Property:" ;
};
+String STR_CLASSIFIED_NATIONAL_SECURITY
+{
+ Text [ en-US ] = "National Security:" ;
+}
+
+;
+String STR_CLASSIFIED_EXPORT_CONTROL
+{
+ Text [ en-US ] = "Export Control:" ;
+};
+
PushButton BT_CHECKOUT
{
Pos = MAP_APPFONT( 0 , 0 );
More information about the Libreoffice-commits
mailing list