[Libreoffice-commits] core.git: include/sfx2 sfx2/source

Akshay Deep akshaydeepiitr at gmail.com
Wed May 25 09:20:14 UTC 2016


 include/sfx2/templatedlg.hxx    |    3 +
 sfx2/source/appl/appopen.cxx    |   10 ++++
 sfx2/source/doc/templatedlg.cxx |   86 ++++++++++++++++++++++++++++++++--------
 3 files changed, 82 insertions(+), 17 deletions(-)

New commits:
commit d37a18ff0576dcbc1e776bef7dc475928c0dd948
Author: Akshay Deep <akshaydeepiitr at gmail.com>
Date:   Tue May 24 01:53:56 2016 +0530

    Template Manager: Filter by Application (Default)
    
    Change-Id: I3ff4a55e3c53df15079730a8d0a283108a74f212
    Reviewed-on: https://gerrit.libreoffice.org/25377
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/include/sfx2/templatedlg.hxx b/include/sfx2/templatedlg.hxx
index b4f9e29..bdae556 100644
--- a/include/sfx2/templatedlg.hxx
+++ b/include/sfx2/templatedlg.hxx
@@ -49,11 +49,14 @@ public:
 
     virtual ~SfxTemplateManagerDlg();
     virtual void dispose() override;
+    virtual short Execute() override;
 
     void setDocumentModel (const css::uno::Reference<css::frame::XModel> &rModel);
 
 private:
 
+    void getApplicationSpecificSettings();
+
     void readSettings ();
 
     void writeSettings ();
diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx
index f1cfc5a..e5ff943 100644
--- a/sfx2/source/appl/appopen.cxx
+++ b/sfx2/source/appl/appopen.cxx
@@ -448,7 +448,17 @@ void SfxApplication::NewDocExec_Impl( SfxRequest& rReq )
         bool bNewWin = false;
         vcl::Window* pTopWin = GetTopWindow();
 
+        SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
+        Reference<XModel> xModel;
+
+        if(pCurrentShell)
+            xModel = pCurrentShell->GetModel();
+
         ScopedVclPtrInstance< SfxTemplateManagerDlg > aTemplDlg;
+
+        if(xModel.is())
+            aTemplDlg->setDocumentModel(pCurrentShell->GetModel());
+
         int nRet = aTemplDlg->Execute();
         if ( nRet == RET_OK )
         {
diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx
index e9279fc..13476b8 100644
--- a/sfx2/source/doc/templatedlg.cxx
+++ b/sfx2/source/doc/templatedlg.cxx
@@ -291,8 +291,6 @@ SfxTemplateManagerDlg::SfxTemplateManagerDlg(vcl::Window *parent)
     mpCBApp->SetSelectHdl(LINK(this, SfxTemplateManagerDlg, SelectApplicationHdl));
     mpCBFolder->SetSelectHdl(LINK(this, SfxTemplateManagerDlg, SelectRegionHdl));
 
-    readSettings();
-
     mpLocalView->Show();
 }
 
@@ -339,6 +337,15 @@ void SfxTemplateManagerDlg::dispose()
     ModalDialog::dispose();
 }
 
+short SfxTemplateManagerDlg::Execute()
+{
+    //use application specific settings if there's no previous setting
+    getApplicationSpecificSettings();
+    readSettings();
+
+    return ModalDialog::Execute();
+}
+
 void SfxTemplateManagerDlg::setDocumentModel(const uno::Reference<frame::XModel> &rModel)
 {
     m_xModel = rModel;
@@ -373,6 +380,45 @@ void SfxTemplateManagerDlg::fillFolderComboBox()
     mpLocalView->ShowTooltips(true);
 }
 
+void SfxTemplateManagerDlg::getApplicationSpecificSettings()
+{
+    if ( ! m_xModel.is() )
+    {
+        mpCBApp->SelectEntryPos(0);
+        mpCBFolder->SelectEntryPos(0);
+        mpCurView->filterItems(ViewFilter_Application(getCurrentApplicationFilter()));
+        mpLocalView->showAllTemplates();
+        return;
+    }
+
+    SvtModuleOptions::EFactory eFactory = SvtModuleOptions::ClassifyFactoryByModel(m_xModel);
+
+    switch(eFactory)
+    {
+        case SvtModuleOptions::EFactory::WRITER:
+        case SvtModuleOptions::EFactory::WRITERWEB:
+        case SvtModuleOptions::EFactory::WRITERGLOBAL:
+                            mpCBApp->SelectEntryPos(MNI_WRITER);
+                            break;
+        case SvtModuleOptions::EFactory::CALC:
+                            mpCBApp->SelectEntryPos(MNI_CALC);
+                            break;
+        case SvtModuleOptions::EFactory::IMPRESS:
+                            mpCBApp->SelectEntryPos(MNI_IMPRESS);
+                            break;
+        case SvtModuleOptions::EFactory::DRAW:
+                            mpCBApp->SelectEntryPos(MNI_DRAW);
+                            break;
+        default:
+                mpCBApp->SelectEntryPos(0);
+                break;
+    }
+
+    mpCurView->filterItems(ViewFilter_Application(getCurrentApplicationFilter()));
+    mpCBFolder->SelectEntryPos(0);
+    mpLocalView->showAllTemplates();
+}
+
 void SfxTemplateManagerDlg::readSettings ()
 {
     OUString aLastFolder;
@@ -383,22 +429,28 @@ void SfxTemplateManagerDlg::readSettings ()
         sal_uInt16 nTmp = 0;
         aViewSettings.GetUserItem(TM_SETTING_LASTFOLDER) >>= aLastFolder;
         aViewSettings.GetUserItem(TM_SETTING_LASTAPPLICATION) >>= nTmp;
-        switch (nTmp)
+
+        //open last remembered application only when application model is not set
+        if(!m_xModel.is())
         {
-            case MNI_WRITER:
-                mpCBApp->SelectEntryPos(MNI_WRITER);
-                break;
-            case MNI_CALC:
-                mpCBApp->SelectEntryPos(MNI_CALC);
-                break;
-            case MNI_IMPRESS:
-                mpCBApp->SelectEntryPos(MNI_IMPRESS);
-                break;
-            case MNI_DRAW:
-                mpCBApp->SelectEntryPos(MNI_DRAW);
-                break;
-            default:
-                mpCBApp->SelectEntryPos(0);
+            switch (nTmp)
+            {
+                case MNI_WRITER:
+                    mpCBApp->SelectEntryPos(MNI_WRITER);
+                    break;
+                case MNI_CALC:
+                    mpCBApp->SelectEntryPos(MNI_CALC);
+                    break;
+                case MNI_IMPRESS:
+                    mpCBApp->SelectEntryPos(MNI_IMPRESS);
+                    break;
+                case MNI_DRAW:
+                    mpCBApp->SelectEntryPos(MNI_DRAW);
+                    break;
+                default:
+                    mpCBApp->SelectEntryPos(0);
+                    break;
+            }
         }
     }
 


More information about the Libreoffice-commits mailing list