dbaccess/source/core/dataaccess/databasedocument.cxx | 6 + dbaccess/source/core/dataaccess/databasedocument.hxx | 1 framework/qa/complex/XTitle/CheckXTitle.java | 34 +++++++++- framework/source/fwe/helper/titlehelper.cxx | 15 ++++ include/sfx2/sfxbasemodel.hxx | 2 include/unotools/mediadescriptor.hxx | 1 offapi/com/sun/star/frame/XModel2.idl | 21 ++++++ sfx2/source/doc/sfxbasemodel.cxx | 30 +++++++++ sw/PythonTest_sw_python.mk | 1 sw/qa/python/check_xmodel.py | 59 +++++++++++++++++++ sw/source/uibase/uno/unotxdoc.cxx | 5 - unotools/source/misc/mediadescriptor.cxx | 6 + 12 files changed, 174 insertions(+), 7 deletions(-)
New commits: commit a66e11492b847a53c84211d78da2c946adaaaf4e Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Thu Dec 13 19:58:36 2018 +0100 Commit: Samuel Mehrbrodt <[email protected]> CommitDate: Mon Dec 17 12:07:30 2018 +0100 tdf#121962 Update fields after layout has been calculated Change-Id: Ic4a49494652dab416ddb1545da02eb8a7f533828 Reviewed-on: https://gerrit.libreoffice.org/65126 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit 2bc1d00af6863d5c92389f1f4a99d2ab9bb73f81) diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index 3a8a7ada5119..6095b8801cbe 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -2594,8 +2594,6 @@ sal_Int32 SAL_CALL SwXTextDocument::getRendererCount( bStateChanged = true; } - // #122919# Force field update before PDF export - pViewShell->SwViewShell::UpdateFields(true); if( bStateChanged ) pRenderDocShell->EnableSetModified(); @@ -2605,6 +2603,9 @@ sal_Int32 SAL_CALL SwXTextDocument::getRendererCount( pViewShell->CalcLayout(); pViewShell->CalcPagesForPrint( pViewShell->GetPageCount() ); + // #122919# Force field update before PDF export, but after layout init (tdf#121962) + pViewShell->SwViewShell::UpdateFields(true); + pViewShell->SetPDFExportOption( false ); // enable view again commit f3104f39740979839135886f42caf204ddb0e477 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Thu Dec 13 09:09:52 2018 +0100 Commit: Samuel Mehrbrodt <[email protected]> CommitDate: Mon Dec 17 12:06:24 2018 +0100 Allow setting some MediaDescriptor properties during runtime Change-Id: Id6bb554c0e165c6d1f9c28c48fdbcd7156f42316 diff --git a/dbaccess/source/core/dataaccess/databasedocument.cxx b/dbaccess/source/core/dataaccess/databasedocument.cxx index 9e0ee5eceb92..6722be2e6ccb 100644 --- a/dbaccess/source/core/dataaccess/databasedocument.cxx +++ b/dbaccess/source/core/dataaccess/databasedocument.cxx @@ -43,6 +43,7 @@ #include <com/sun/star/io/XSeekable.hpp> #include <com/sun/star/io/XOutputStream.hpp> #include <com/sun/star/io/XTruncate.hpp> +#include <com/sun/star/lang/NoSupportException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> #include <com/sun/star/script/provider/theMasterScriptProviderFactory.hpp> #include <com/sun/star/sdb/DatabaseContext.hpp> @@ -823,6 +824,11 @@ Sequence< PropertyValue > SAL_CALL ODatabaseDocument::getArgs( ) throw (Runtime return m_pImpl->getMediaDescriptor().getPropertyValues(); } +void SAL_CALL ODatabaseDocument::setArgs(const Sequence<beans::PropertyValue>& /* aArgs */) +{ + throw NoSupportException(); +} + void SAL_CALL ODatabaseDocument::connectController( const Reference< XController >& _xController ) throw (RuntimeException, std::exception) { DocumentGuard aGuard(*this, DocumentGuard::DefaultMethod); diff --git a/dbaccess/source/core/dataaccess/databasedocument.hxx b/dbaccess/source/core/dataaccess/databasedocument.hxx index f9d4107a07ba..80d411272b06 100644 --- a/dbaccess/source/core/dataaccess/databasedocument.hxx +++ b/dbaccess/source/core/dataaccess/databasedocument.hxx @@ -327,6 +327,7 @@ public: virtual css::uno::Sequence< OUString > SAL_CALL getAvailableViewControllerNames( ) throw (css::uno::RuntimeException, std::exception) override ; virtual css::uno::Reference< css::frame::XController2 > SAL_CALL createDefaultViewController( const css::uno::Reference< css::frame::XFrame >& Frame ) throw (css::lang::IllegalArgumentException, css::uno::Exception, css::uno::RuntimeException, std::exception) override ; virtual css::uno::Reference< css::frame::XController2 > SAL_CALL createViewController( const OUString& ViewName, const css::uno::Sequence< css::beans::PropertyValue >& Arguments, const css::uno::Reference< css::frame::XFrame >& Frame ) throw (css::lang::IllegalArgumentException, css::uno::Exception, css::uno::RuntimeException, std::exception) override ; + virtual void SAL_CALL setArgs(const css::uno::Sequence<css::beans::PropertyValue>& aArgs) override; // XStorable virtual sal_Bool SAL_CALL hasLocation( ) throw (css::uno::RuntimeException, std::exception) override ; diff --git a/include/sfx2/sfxbasemodel.hxx b/include/sfx2/sfxbasemodel.hxx index 8e678caf59e0..051b56f54685 100644 --- a/include/sfx2/sfxbasemodel.hxx +++ b/include/sfx2/sfxbasemodel.hxx @@ -350,6 +350,8 @@ public: css::lang::IllegalArgumentException, css::uno::Exception, std::exception ) override; + virtual void SAL_CALL setArgs(const css::uno::Sequence<css::beans::PropertyValue>& aArgs) override; + // XModifiable2 diff --git a/offapi/com/sun/star/frame/XModel2.idl b/offapi/com/sun/star/frame/XModel2.idl index 0a0e15f1b738..41d44512149a 100644 --- a/offapi/com/sun/star/frame/XModel2.idl +++ b/offapi/com/sun/star/frame/XModel2.idl @@ -24,6 +24,7 @@ #include <com/sun/star/container/XEnumeration.idl> #include <com/sun/star/awt/XWindow.idl> #include <com/sun/star/lang/IllegalArgumentException.idl> +#include <com/sun/star/util/InvalidStateException.idl> module com { module sun { module star { module frame { @@ -129,6 +130,26 @@ interface XModel2 : com::sun::star::frame::XModel [in] com::sun::star::frame::XFrame Frame ) raises (com::sun::star::lang::IllegalArgumentException, com::sun::star::uno::Exception ); + + /** Sets com::sun::star::document::MediaDescriptor properties + of the current model during runtime. + + @since LibreOffice 6.3 + + @param Arguments + Properties which should be set + Supported properties: + <ul> + <li>com::sun::star::document::MediaDescriptor::SuggestedSaveAsDir</li> + <li>com::sun::star::document::MediaDescriptor::SuggestedSaveAsName</li> + </ul> + + @throws com::sun::star::lang::IllegalArgumentException When trying to set an unsupported property + @throws com::sun::star::util::InvalidStateException When the document model can not be retrieved + */ + void setArgs([in] sequence< com::sun::star::beans::PropertyValue > Arguments) + raises(com::sun::star::lang::IllegalArgumentException, + com::sun::star::util::InvalidStateException); }; diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx index 6be889c2b9dd..979c34f549ce 100644 --- a/sfx2/source/doc/sfxbasemodel.cxx +++ b/sfx2/source/doc/sfxbasemodel.cxx @@ -51,6 +51,7 @@ #include <com/sun/star/frame/XTransientDocumentsDocumentContentFactory.hpp> #include <com/sun/star/ucb/XCommandEnvironment.hpp> #include <com/sun/star/util/XCloneable.hpp> +#include <com/sun/star/util/InvalidStateException.hpp> #include <comphelper/enumhelper.hxx> #include <cppuhelper/implbase.hxx> @@ -1050,6 +1051,35 @@ Sequence< beans::PropertyValue > SAL_CALL SfxBaseModel::getArgs() throw(RuntimeE return m_pData->m_seqArguments; } +void SAL_CALL SfxBaseModel::setArgs(const Sequence<beans::PropertyValue>& aArgs) +{ + SfxMedium* pMedium = m_pData->m_pObjectShell->GetMedium(); + if (!pMedium) + { + throw util::InvalidStateException( + "Medium could not be retrieved, unable to execute setArgs"); + } + + for (int i = 0; i < aArgs.getLength(); i++) + { + OUString sValue; + aArgs[i].Value >>= sValue; + + if (aArgs[i].Name == "SuggestedSaveAsName") + { + pMedium->GetItemSet()->Put(SfxStringItem(SID_SUGGESTEDSAVEASNAME, sValue)); + } + else if (aArgs[i].Name == "SuggestedSaveAsDir") + { + pMedium->GetItemSet()->Put(SfxStringItem(SID_SUGGESTEDSAVEASDIR, sValue)); + } + else + { + throw lang::IllegalArgumentException("Setting property not supported: " + aArgs[i].Name, + comphelper::getProcessComponentContext(), 0); + } + } +} // frame::XModel diff --git a/sw/PythonTest_sw_python.mk b/sw/PythonTest_sw_python.mk index 774f6f8aba42..98c833915ab3 100644 --- a/sw/PythonTest_sw_python.mk +++ b/sw/PythonTest_sw_python.mk @@ -23,6 +23,7 @@ $(eval $(call gb_PythonTest_add_modules,sw_python,$(SRCDIR)/sw/qa/python,\ check_indexed_property_values \ check_styles \ check_table \ + check_xmodel \ get_expression \ set_expression \ var_fields \ diff --git a/sw/qa/python/check_xmodel.py b/sw/qa/python/check_xmodel.py new file mode 100644 index 000000000000..c5374c03c350 --- /dev/null +++ b/sw/qa/python/check_xmodel.py @@ -0,0 +1,59 @@ +#! /usr/bin/env python +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +import unittest +import unohelper +from org.libreoffice.unotest import UnoInProcess +from com.sun.star.lang import IllegalArgumentException +from com.sun.star.beans import PropertyValue +import uno + + +class TestXModel(unittest.TestCase): + + @classmethod + def setUpClass(cls): + cls._uno = UnoInProcess() + cls._uno.setUp() + + @classmethod + def tearDownClass(cls): + cls._uno.tearDown() + + def test_setArgs_valid(self): + xDoc = self._uno.openEmptyWriterDoc() + self.assertIsNotNone(xDoc) + + p1 = PropertyValue(Name="SuggestedSaveAsName", Value="prettyFileName") + p2 = PropertyValue(Name="SuggestedSaveAsDir", Value="/my/dir") + xDoc.setArgs([p1, p2]) + + # Make sure that all properties are returned with getArgs() + args = xDoc.getArgs() + self.assertTrue(p1 in args) + self.assertTrue(p2 in args) + + xDoc.close(True) + + def test_setArgs_invalid(self): + xDoc = self._uno.openEmptyWriterDoc() + self.assertIsNotNone(xDoc) + + # IllegalArgumentException should be thrown when setting a non-existing property + p1 = PropertyValue(Name="PropertyNotExists", Value="doesntmatter") + with self.assertRaises(IllegalArgumentException): + xDoc.setArgs([p1]) + + xDoc.close(True) + + +if __name__ == '__main__': + unittest.main() + +# vim: set shiftwidth=4 softtabstop=4 expandtab: commit 39bf07cca1bcb181371ea5a3ee0bb2f816f58896 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Tue Nov 20 13:12:13 2018 +0100 Commit: Samuel Mehrbrodt <[email protected]> CommitDate: Mon Dec 17 11:42:13 2018 +0100 tdf#121537 Add test Reviewed-on: https://gerrit.libreoffice.org/63654 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit 9b3387f57d4a762f681ab5276aff8764426c6aa4) Change-Id: Ifdf46dc79f9b3e2b5ab4c9635619a9d7f598affc diff --git a/framework/qa/complex/XTitle/CheckXTitle.java b/framework/qa/complex/XTitle/CheckXTitle.java index 8912470003af..a53363edfe5b 100644 --- a/framework/qa/complex/XTitle/CheckXTitle.java +++ b/framework/qa/complex/XTitle/CheckXTitle.java @@ -18,10 +18,7 @@ package complex.XTitle; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; import helper.URLHelper; import util.utils; @@ -169,7 +166,34 @@ public class CheckXTitle xDisProv = null; } - /** @short sets frame title and checks for infinite recusion + /** checks the if SuggestedSaveAsName is displayed in the title */ + @Test + public void checkTitleSuggestedFileName() throws Exception + { + PropertyValue[] lArgs = new PropertyValue[2]; + + lArgs[0] = new PropertyValue(); + lArgs[0].Name = "Hidden"; + lArgs[0].Value = Boolean.FALSE; + lArgs[1] = new PropertyValue(); + lArgs[1].Name = "SuggestedSaveAsName"; + lArgs[1].Value = "suggestme.odt"; + + // load doc + XComponent xDoc = m_xLoader.loadComponentFromURL("private:factory/swriter", "_blank", 0, lArgs); + assertNotNull("Could not load temporary document", xDoc); + + XModel xModel = UnoRuntime.queryInterface( XModel.class, xDoc ); + XTitle xTitle = UnoRuntime.queryInterface( XTitle.class, xModel.getCurrentController().getFrame() ); + + String title = xTitle.getTitle(); + assertTrue(title.startsWith("suggestme.odt")); + + XDispatchProvider xDisProv = UnoRuntime.queryInterface( XDispatchProvider.class, xModel.getCurrentController() ); + prepareQueryAndDispatch( xDisProv, UNO_URL_FOR_CLOSING_DOC ); + } + + /** @short sets frame title and checks for infinite recursion @descr sets frame title. then cycles through default and print preview. then closes the window and checks commit 5a78981dded92944a9c288fa4f81040c39394881 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Tue Nov 20 09:12:36 2018 +0100 Commit: Samuel Mehrbrodt <[email protected]> CommitDate: Mon Dec 17 11:38:24 2018 +0100 tdf#121537 Display SuggestedSaveAsName in title if set Change-Id: I762eb7766a5cbe788c0a360c8a6f37b9b1106412 Reviewed-on: https://gerrit.libreoffice.org/63639 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit 4355137901e18e24de2ab123fd0454147f1f3890) diff --git a/framework/source/fwe/helper/titlehelper.cxx b/framework/source/fwe/helper/titlehelper.cxx index cbd18f96af17..2d54d25824c9 100644 --- a/framework/source/fwe/helper/titlehelper.cxx +++ b/framework/source/fwe/helper/titlehelper.cxx @@ -32,12 +32,18 @@ #include <unotools/configmgr.hxx> #include <unotools/bootstrap.hxx> +#include <unotools/mediadescriptor.hxx> #include <comphelper/sequenceashashmap.hxx> #include <rtl/ustrbuf.hxx> #include <osl/mutex.hxx> #include <tools/urlobj.hxx> #include <vcl/opengl/OpenGLWrapper.hxx> + +using namespace css; +using namespace css::uno; +using namespace css::frame; + namespace framework{ TitleHelper::TitleHelper(const css::uno::Reference< css::uno::XComponentContext >& rxContext) @@ -346,6 +352,10 @@ void TitleHelper::impl_updateTitleForModel (const css::uno::Reference< css::fram if (xURLProvider.is()) sURL = xURLProvider->getLocation (); + utl::MediaDescriptor aDescriptor(xModel->getArgs()); + const OUString sSuggestedSaveAsName = aDescriptor.getUnpackedValueOrDefault( + utl::MediaDescriptor::PROP_SUGGESTEDSAVEASNAME(), OUString()); + if (!sURL.isEmpty()) { sTitle = impl_convertURL2Title(sURL); @@ -353,6 +363,11 @@ void TitleHelper::impl_updateTitleForModel (const css::uno::Reference< css::fram xNumbers->releaseNumber (nLeasedNumber); nLeasedNumber = css::frame::UntitledNumbersConst::INVALID_NUMBER; } + else if (!sSuggestedSaveAsName.isEmpty()) + { + // tdf#121537 Use suggested save as name for title if file has not yet been saved + sTitle = sSuggestedSaveAsName; + } else { if (nLeasedNumber == css::frame::UntitledNumbersConst::INVALID_NUMBER) diff --git a/include/unotools/mediadescriptor.hxx b/include/unotools/mediadescriptor.hxx index cc2f02183c82..f6da605795f8 100644 --- a/include/unotools/mediadescriptor.hxx +++ b/include/unotools/mediadescriptor.hxx @@ -99,6 +99,7 @@ class UNOTOOLS_DLLPUBLIC MediaDescriptor : public comphelper::SequenceAsHashMap static const OUString& PROP_MODEL(); static const OUString& PROP_VIEWONLY(); static const OUString& PROP_DOCUMENTBASEURL(); + static const OUString& PROP_SUGGESTEDSAVEASNAME(); // interface public: diff --git a/unotools/source/misc/mediadescriptor.cxx b/unotools/source/misc/mediadescriptor.cxx index e123474a1abf..9ab4fb492862 100644 --- a/unotools/source/misc/mediadescriptor.cxx +++ b/unotools/source/misc/mediadescriptor.cxx @@ -322,6 +322,12 @@ const OUString& MediaDescriptor::PROP_DOCUMENTBASEURL() return sProp; } +const OUString& MediaDescriptor::PROP_SUGGESTEDSAVEASNAME() +{ + static const OUString sProp("SuggestedSaveAsName"); + return sProp; +} + MediaDescriptor::MediaDescriptor() : SequenceAsHashMap() { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
