[Libreoffice-commits] core.git: 3 commits - cui/source officecfg/registry sfx2/source unotools/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Mar 2 16:27:04 UTC 2016


 cui/source/options/optpath.cxx                             |   25 +++++++
 officecfg/registry/schema/org/openoffice/Office/Common.xcs |    6 +
 sfx2/source/view/classificationcontroller.cxx              |   41 +++++++++++++
 unotools/source/config/defaultoptions.cxx                  |   13 ++--
 4 files changed, 80 insertions(+), 5 deletions(-)

New commits:
commit 8ba5369032202fd727cbf1af61284fdb5e3f4ec7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Mar 2 17:06:29 2016 +0100

    sfx2 classification: add config listener to avoid restarts
    
    So that when SvxPathTabPage sets a custom classification path (or resets
    it back to the default), then no restart is needed, the toolbar will be
    updated instantly.
    
    ClassificationCategoriesController::statusChanged() was called already,
    all that was necessary is to remove old entries, to trigger a re-read of
    the policy.
    
    Change-Id: I98edea19fedfb5c1197981085193f959c19647a1

diff --git a/sfx2/source/view/classificationcontroller.cxx b/sfx2/source/view/classificationcontroller.cxx
index fa54a9b..1dc8134 100644
--- a/sfx2/source/view/classificationcontroller.cxx
+++ b/sfx2/source/view/classificationcontroller.cxx
@@ -24,18 +24,34 @@
 #include <cppuhelper/supportsservice.hxx>
 #include <comphelper/propertysequence.hxx>
 #include <comphelper/dispatchcommand.hxx>
+#include <comphelper/configurationlistener.hxx>
 
 using namespace com::sun::star;
 
 namespace sfx2
 {
 
+class ClassificationCategoriesController;
+using ClassificationPropertyListenerBase = comphelper::ConfigurationListenerProperty<OUString>;
+
+/// Listens to configuration changes, so no restart is needed after setting the classification path.
+class ClassificationPropertyListener : public ClassificationPropertyListenerBase
+{
+    ClassificationCategoriesController& m_rController;
+
+public:
+    ClassificationPropertyListener(const rtl::Reference<comphelper::ConfigurationListener>& xListener, ClassificationCategoriesController& rController);
+    virtual void setProperty(const uno::Any& rProperty) override;
+};
+
 using ClassificationCategoriesControllerBase = cppu::ImplInheritanceHelper<svt::ToolboxController, lang::XServiceInfo>;
 
 /// Controller for .uno:ClassificationApply.
 class ClassificationCategoriesController : public ClassificationCategoriesControllerBase
 {
     VclPtr<ListBox> m_pCategories;
+    rtl::Reference<comphelper::ConfigurationListener> m_xListener;
+    ClassificationPropertyListener m_aPropertyListener;
 
     DECL_LINK_TYPED(SelectHdl, ListBox&, void);
 
@@ -56,12 +72,29 @@ public:
 
     // XStatusListener
     virtual void SAL_CALL statusChanged(const frame::FeatureStateEvent& rEvent) throw (uno::RuntimeException, std::exception) override;
+
+    void removeEntries();
 };
 
+ClassificationPropertyListener::ClassificationPropertyListener(const rtl::Reference<comphelper::ConfigurationListener>& xListener, ClassificationCategoriesController& rController)
+    : ClassificationPropertyListenerBase(xListener, "WritePath")
+    , m_rController(rController)
+{
+}
+
+void ClassificationPropertyListener::setProperty(const uno::Any& /*rProperty*/)
+{
+    // So that its gets re-filled with entries from the new policy.
+    m_rController.removeEntries();
+}
+
 ClassificationCategoriesController::ClassificationCategoriesController(const uno::Reference<uno::XComponentContext>& rContext)
     : ClassificationCategoriesControllerBase(rContext, uno::Reference<frame::XFrame>(), OUString(".uno:ClassificationApply"))
     , m_pCategories(nullptr)
+    , m_xListener(new comphelper::ConfigurationListener("/org.openoffice.Office.Paths/Paths/Classification"))
+    , m_aPropertyListener(m_xListener, *this)
 {
+
 }
 
 ClassificationCategoriesController::~ClassificationCategoriesController()
@@ -93,6 +126,8 @@ void ClassificationCategoriesController::dispose() throw (uno::RuntimeException,
 
     svt::ToolboxController::dispose();
     m_pCategories.disposeAndClear();
+    m_aPropertyListener.dispose();
+    m_xListener->dispose();
 }
 
 uno::Reference<awt::XWindow> ClassificationCategoriesController::createItemWindow(const uno::Reference<awt::XWindow>& rParent) throw (uno::RuntimeException, std::exception)
@@ -146,6 +181,12 @@ void ClassificationCategoriesController::statusChanged(const frame::FeatureState
         m_pCategories->SelectEntry(rCategoryName);
 }
 
+void ClassificationCategoriesController::removeEntries()
+{
+    if (m_pCategories)
+        m_pCategories->Clear();
+}
+
 } // namespace sfx2
 
 extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface* SAL_CALL com_sun_star_sfx2_ClassificationCategoriesController_get_implementation(uno::XComponentContext* pContext, const uno::Sequence<uno::Any>&)
commit 5582f0596876c82df343dd0e5d354cd4403e9594
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Mar 2 15:09:28 2016 +0100

    unotools: handle classification path in SvtDefaultOptions
    
    With this, it's possible to reset a custom classification path back to
    its default value.
    
    Change-Id: If0230fa6bb6ab014634dcdface8c470321163097

diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index e06114e..99fc0ef 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -1782,6 +1782,12 @@
           </info>
           <value>$(insturl)/@LIBO_SHARE_FOLDER@/config</value>
         </prop>
+        <prop oor:name="Classification" oor:type="xs:string" oor:nillable="false">
+          <info>
+            <desc>Contains the URL of the default TSCP BAF policy file.</desc>
+          </info>
+          <value>$(insturl)/@LIBO_SHARE_FOLDER@/classification/example.xml</value>
+        </prop>
         <prop oor:name="Dictionary" oor:type="xs:string" oor:nillable="false">
           <info>
             <desc>Specifies the default directory where the provided
diff --git a/unotools/source/config/defaultoptions.cxx b/unotools/source/config/defaultoptions.cxx
index ee3731b..caccc93 100644
--- a/unotools/source/config/defaultoptions.cxx
+++ b/unotools/source/config/defaultoptions.cxx
@@ -60,7 +60,8 @@ using namespace com::sun::star::uno;
 #define DEFAULTPATH__TEMPLATE       18
 #define DEFAULTPATH__USERCONFIG     19
 #define DEFAULTPATH__WORK           20
-#define DEFAULTPATH__USERDICTIONARY 21
+#define DEFAULTPATH__CLASSIFICATION 21
+#define DEFAULTPATH__USERDICTIONARY 22
 
 // class SvtDefaultOptions_Impl ------------------------------------------
 
@@ -88,6 +89,7 @@ public:
     OUString         m_aTemplatePath;
     OUString         m_aUserConfigPath;
     OUString         m_aWorkPath;
+    OUString         m_aClassificationPath;
     OUString         m_aUserDictionaryPath;
 
                     SvtDefaultOptions_Impl();
@@ -134,7 +136,8 @@ static PathToDefaultMapping_Impl const PathMap_Impl[] =
     { SvtPathOptions::PATH_TEMP,            &SvtDefaultOptions_Impl::m_aTempPath },
     { SvtPathOptions::PATH_TEMPLATE,        &SvtDefaultOptions_Impl::m_aTemplatePath },
     { SvtPathOptions::PATH_USERCONFIG,      &SvtDefaultOptions_Impl::m_aUserConfigPath },
-    { SvtPathOptions::PATH_WORK,            &SvtDefaultOptions_Impl::m_aWorkPath }
+    { SvtPathOptions::PATH_WORK,            &SvtDefaultOptions_Impl::m_aWorkPath },
+    { SvtPathOptions::PATH_CLASSIFICATION,  &SvtDefaultOptions_Impl::m_aClassificationPath }
 };
 
 // functions -------------------------------------------------------------
@@ -163,7 +166,8 @@ Sequence< OUString > GetDefaultPropertyNames()
         "Temp",             // PATH_TEMP
         "Template",         // PATH_TEMPLATE
         "UserConfig",       // PATH_USERCONFIG
-        "Work"              // PATH_WORK
+        "Work",             // PATH_WORK
+        "Classification"    // PATH_CLASSIFICATION
     };
 
     const int nCount = sizeof( aPropNames ) / sizeof( const char* );
@@ -192,7 +196,7 @@ OUString SvtDefaultOptions_Impl::GetDefaultPath( sal_uInt16 nId ) const
     OUString aRet;
     sal_uInt16 nIdx = 0;
 
-    while ( PathMap_Impl[nIdx]._ePath <= SvtPathOptions::PATH_WORK )
+    while ( PathMap_Impl[nIdx]._ePath <= SvtPathOptions::PATH_CLASSIFICATION )
     {
         if ( nId == PathMap_Impl[nIdx]._ePath && PathMap_Impl[nIdx]._pDefaultPath )
         {
@@ -298,6 +302,7 @@ SvtDefaultOptions_Impl::SvtDefaultOptions_Impl() : ConfigItem( "Office.Common/Pa
                     case DEFAULTPATH__TEMPLATE:         m_aTemplatePath = aFullPath;      break;
                     case DEFAULTPATH__USERCONFIG:       m_aUserConfigPath = aFullPath;    break;
                     case DEFAULTPATH__WORK:             m_aWorkPath = aFullPath;          break;
+                    case DEFAULTPATH__CLASSIFICATION:   m_aClassificationPath = aFullPath;break;
                     case DEFAULTPATH__USERDICTIONARY:   m_aUserDictionaryPath = aFullPath;break;
 
                     default:
commit b4d43cc2152e5cdd274ad76c90532694cc1fb6e2
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Mar 2 14:21:37 2016 +0100

    cui: classification path is a file, not a directory in SvxPathTabPage
    
    So when editing the classification path, open a file picker, not a
    directory one.
    
    Change-Id: I8f7e18f90dc2b5f180e7ddda7157c1e374ed6e4e

diff --git a/cui/source/options/optpath.cxx b/cui/source/options/optpath.cxx
index d1951f7..03155e4 100644
--- a/cui/source/options/optpath.cxx
+++ b/cui/source/options/optpath.cxx
@@ -46,11 +46,14 @@
 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
 #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
 #include <com/sun/star/ui/dialogs/FolderPicker.hpp>
+#include <com/sun/star/ui/dialogs/FilePicker.hpp>
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
 #include <com/sun/star/util/thePathSettings.hpp>
 #include <officecfg/Office/Common.hxx>
 #include "optHeaderTabListbox.hxx"
 #include <vcl/help.hxx>
 
+using namespace css;
 using namespace css::beans;
 using namespace css::lang;
 using namespace css::ui::dialogs;
@@ -546,6 +549,7 @@ IMPL_LINK_NOARG_TYPED(SvxPathTabPage, PathHdl_Impl, Button*, void)
     SvTreeListEntry* pEntry = pPathBox->GetCurEntry();
     sal_uInt16 nPos = ( pEntry != nullptr ) ? static_cast<PathUserData_Impl*>(pEntry->GetUserData())->nRealId : 0;
     OUString sInternal, sUser, sWritable;
+    bool bPickFile = false;
     if ( pEntry )
     {
         PathUserData_Impl* pPathImpl = static_cast<PathUserData_Impl*>(pEntry->GetUserData());
@@ -553,6 +557,7 @@ IMPL_LINK_NOARG_TYPED(SvxPathTabPage, PathHdl_Impl, Button*, void)
         GetPathList( pPathImpl->nRealId, sInternal, sUser, sWritable, bReadOnly );
         sUser = pPathImpl->sUserPath;
         sWritable = pPathImpl->sWritablePath;
+        bPickFile = pPathImpl->nRealId == SvtPathOptions::PATH_CLASSIFICATION;
     }
 
     if(pEntry && !(!SvTreeListBox::GetCollapsedEntryBmp(pEntry)))
@@ -614,7 +619,7 @@ IMPL_LINK_NOARG_TYPED(SvxPathTabPage, PathHdl_Impl, Button*, void)
             }
         }
     }
-    else if ( pEntry )
+    else if (pEntry && !bPickFile)
     {
         try
         {
@@ -642,6 +647,24 @@ IMPL_LINK_NOARG_TYPED(SvxPathTabPage, PathHdl_Impl, Button*, void)
             SAL_WARN( "cui.options", "SvxPathTabPage::PathHdl_Impl: exception from folder picker" );
         }
     }
+    else if (pEntry)
+    {
+        try
+        {
+            uno::Reference<uno::XComponentContext> xComponentContext(comphelper::getProcessComponentContext());
+            uno::Reference<ui::dialogs::XFilePicker3> xFilePicker = ui::dialogs::FilePicker::createWithMode(xComponentContext, ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE);
+            xFilePicker->appendFilter(OUString(), "*.xml");
+            if (xFilePicker->execute() == ui::dialogs::ExecutableDialogResults::OK)
+            {
+                uno::Sequence<OUString> aPathSeq(xFilePicker->getSelectedFiles());
+                ChangeCurrentEntry(aPathSeq[0]);
+            }
+        }
+        catch (const uno::Exception& rException)
+        {
+            SAL_WARN("cui.options", "SvxPathTabPage::PathHdl_Impl: exception from file picker: " << rException.Message);
+        }
+    }
 }
 
 


More information about the Libreoffice-commits mailing list