extensions/source/abpilot/abpfinalpage.cxx | 17 +++++++ extensions/source/abpilot/abpfinalpage.hxx | 3 + extensions/source/abpilot/abspilot.cxx | 3 - extensions/source/abpilot/addresssettings.hxx | 1 extensions/source/abpilot/datasourcehandling.cxx | 52 ++++++++++++++++++++-- extensions/source/abpilot/datasourcehandling.hxx | 3 - extensions/uiconfig/sabpilot/ui/datasourcepage.ui | 22 +++++++-- 7 files changed, 92 insertions(+), 9 deletions(-)
New commits: commit b3f5ab776591f134e5f1692e745f62a2df599a67 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Jun 4 14:19:38 2015 +0200 abpilot: embed the data source definition, if possible + requested Change-Id: I0e70459e331995388b36c77c351bff89ece004a6 diff --git a/extensions/source/abpilot/abspilot.cxx b/extensions/source/abpilot/abspilot.cxx index 459f321..1ef0ebe 100644 --- a/extensions/source/abpilot/abspilot.cxx +++ b/extensions/source/abpilot/abspilot.cxx @@ -158,7 +158,7 @@ namespace abp m_aNewDataSource.rename( m_aSettings.sDataSourceName ); // 1. the data source - m_aNewDataSource.store(); + m_aNewDataSource.store(m_aSettings); // 2. check if we need to register the data source if ( m_aSettings.bRegisterDataSource ) diff --git a/extensions/source/abpilot/datasourcehandling.cxx b/extensions/source/abpilot/datasourcehandling.cxx index 3895268..f3d6268 100644 --- a/extensions/source/abpilot/datasourcehandling.cxx +++ b/extensions/source/abpilot/datasourcehandling.cxx @@ -22,6 +22,7 @@ #include "abptypes.hxx" #include "componentmodule.hxx" #include "datasourcehandling.hxx" +#include "addresssettings.hxx" #include <boost/noncopyable.hpp> #include <com/sun/star/beans/XPropertySet.hpp> @@ -46,7 +47,28 @@ #include <unotools/confignode.hxx> #include <unotools/sharedunocomponent.hxx> #include <vcl/stdtext.hxx> +#include <sfx2/objsh.hxx> +#include <sfx2/docfile.hxx> +#include <sfx2/viewfrm.hxx> +#include <comphelper/propertysequence.hxx> +namespace +{ + +/// Returns the URL of this object shell. +OUString lcl_getOwnURL(SfxObjectShell* pObjectShell) +{ + OUString aRet; + + if (!pObjectShell) + return aRet; + + const INetURLObject& rURLObject = pObjectShell->GetMedium()->GetURLObject(); + aRet = rURLObject.GetMainURL(INetURLObject::DECODE_WITH_CHARSET); + return aRet; +} + +} namespace abp { @@ -54,6 +76,7 @@ namespace abp using namespace ::utl; using namespace ::comphelper; + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sdb; @@ -347,8 +370,7 @@ namespace abp delete m_pImpl; } - - void ODataSource::store() + void ODataSource::store(const AddressSettings& rSettings) { if (!isValid()) // nothing to do @@ -361,7 +383,31 @@ namespace abp xStorable.set(xDocAccess->getDatabaseDocument(), css::uno::UNO_QUERY); OSL_ENSURE( xStorable.is(),"DataSource is no XStorable!" ); if ( xStorable.is() ) - xStorable->storeAsURL(m_pImpl->sName,Sequence<PropertyValue>()); + { + SfxObjectShell* pObjectShell = SfxViewFrame::Current()->GetObjectShell(); + OUString aOwnURL = lcl_getOwnURL(pObjectShell); + if (aOwnURL.isEmpty() || !rSettings.bEmbedDataSource) + { + // Cannot or should not embed. + xStorable->storeAsURL(m_pImpl->sName,Sequence<PropertyValue>()); + } + else + { + // Embed. + OUString aStreamRelPath = "EmbeddedDatabase"; + OUString sTmpName = "vnd.sun.star.pkg://"; + sTmpName += INetURLObject::encode(aOwnURL, INetURLObject::PART_AUTHORITY, INetURLObject::ENCODE_ALL); + sTmpName += "/" + aStreamRelPath; + uno::Reference<embed::XStorage> xStorage = pObjectShell->GetStorage(); + uno::Sequence<beans::PropertyValue> aSequence = comphelper::InitPropertySequence( + { + {"TargetStorage", uno::makeAny(xStorage)}, + {"StreamRelPath", uno::makeAny(aStreamRelPath)} + }); + xStorable->storeAsURL(sTmpName, aSequence); + m_pImpl->sName = sTmpName; + } + } } catch(const Exception&) { diff --git a/extensions/source/abpilot/datasourcehandling.hxx b/extensions/source/abpilot/datasourcehandling.hxx index fd4a75f..0d96f1d 100644 --- a/extensions/source/abpilot/datasourcehandling.hxx +++ b/extensions/source/abpilot/datasourcehandling.hxx @@ -95,6 +95,7 @@ namespace abp struct ODataSourceImpl; struct PackageAccessControl; + struct AddressSettings; /** a non-UNO wrapper for a data source <p>This class allows to access data sources without the need to compile the respective file with exception handling enabled (hopefully :).</p> @@ -159,7 +160,7 @@ namespace abp void disconnect( ); /// stores the database file - void store(); + void store(const AddressSettings& rSettings); /// register the data source under the given name in the configuration void registerDataSource( const OUString& _sRegisteredDataSourceName ); commit b2117c98ed959e79079084a6e3e6e490573e7236 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Jun 4 12:42:06 2015 +0200 abpilot: store embedding preference in AddressSettings Change-Id: I83235f79d30e5f573fee95a525b4cfe1211a24b7 diff --git a/extensions/source/abpilot/abpfinalpage.cxx b/extensions/source/abpilot/abpfinalpage.cxx index ccbd9b6..12dbd49 100644 --- a/extensions/source/abpilot/abpfinalpage.cxx +++ b/extensions/source/abpilot/abpfinalpage.cxx @@ -158,6 +158,7 @@ namespace abp rSettings.bRegisterDataSource = m_pRegisterName->IsChecked(); if ( rSettings.bRegisterDataSource ) rSettings.sRegisteredDataSourceName = m_pName->GetText(); + rSettings.bEmbedDataSource = m_pEmbed->IsChecked(); return true; } diff --git a/extensions/source/abpilot/abspilot.cxx b/extensions/source/abpilot/abspilot.cxx index a27b1e6..459f321 100644 --- a/extensions/source/abpilot/abspilot.cxx +++ b/extensions/source/abpilot/abspilot.cxx @@ -113,6 +113,7 @@ namespace abp #endif m_aSettings.sDataSourceName = ModuleRes(RID_STR_DEFAULT_NAME).toString(); m_aSettings.bRegisterDataSource = false; + m_aSettings.bEmbedDataSource = false; m_aSettings.bIgnoreNoTable = false; defaultButton(WizardButtonFlags::NEXT); diff --git a/extensions/source/abpilot/addresssettings.hxx b/extensions/source/abpilot/addresssettings.hxx index 4cc4377..16d508a 100644 --- a/extensions/source/abpilot/addresssettings.hxx +++ b/extensions/source/abpilot/addresssettings.hxx @@ -54,6 +54,7 @@ namespace abp bool bIgnoreNoTable; MapString2String aFieldMapping; bool bRegisterDataSource; + bool bEmbedDataSource; }; commit ef0217f24e99a3313ed1467c6f2f496a14777db2 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Jun 4 12:01:25 2015 +0200 abpilot: add checkbox to embed data source in datasourcepage Change-Id: Iea9984af3f08ed214815b9477019695f2339a7f3 diff --git a/extensions/source/abpilot/abpfinalpage.cxx b/extensions/source/abpilot/abpfinalpage.cxx index 0be3156..ccbd9b6 100644 --- a/extensions/source/abpilot/abpfinalpage.cxx +++ b/extensions/source/abpilot/abpfinalpage.cxx @@ -49,7 +49,9 @@ namespace abp get(m_pLocation, "location"); get(m_pBrowse, "browse"); get(m_pRegisterName, "available"); + get(m_pEmbed, "embed"); get(m_pNameLabel, "nameft"); + get(m_pLocationLabel, "locationft"); get(m_pName, "name"); get(m_pDuplicateNameError, "warning"); m_pLocationController = new svx::DatabaseLocationInputController(_pParent->getORB(), @@ -59,6 +61,9 @@ namespace abp m_pLocation->SetModifyHdl( LINK(this, FinalPage, OnNameModified) ); m_pRegisterName->SetClickHdl( LINK( this, FinalPage, OnRegister ) ); m_pRegisterName->Check(true); + m_pEmbed->SetClickHdl( LINK( this, FinalPage, OnEmbed ) ); + m_pEmbed->Check(true); + OnEmbed(m_pEmbed); } FinalPage::~FinalPage() @@ -72,7 +77,9 @@ namespace abp m_pLocation.clear(); m_pBrowse.clear(); m_pRegisterName.clear(); + m_pEmbed.clear(); m_pNameLabel.clear(); + m_pLocationLabel.clear(); m_pName.clear(); m_pDuplicateNameError.clear(); AddressBookSourcePage::dispose(); @@ -219,6 +226,15 @@ namespace abp return 0L; } + IMPL_LINK_NOARG(FinalPage, OnEmbed) + { + bool bEmbed = m_pEmbed->IsChecked(); + m_pLocationLabel->Enable(!bEmbed); + m_pLocation->Enable(!bEmbed); + m_pBrowse->Enable(!bEmbed); + return 0L; + } + } // namespace abp diff --git a/extensions/source/abpilot/abpfinalpage.hxx b/extensions/source/abpilot/abpfinalpage.hxx index d601e8d..ceb1d0b 100644 --- a/extensions/source/abpilot/abpfinalpage.hxx +++ b/extensions/source/abpilot/abpfinalpage.hxx @@ -38,7 +38,9 @@ namespace abp VclPtr< ::svt::OFileURLControl> m_pLocation; VclPtr<PushButton> m_pBrowse; VclPtr<CheckBox> m_pRegisterName; + VclPtr<CheckBox> m_pEmbed; VclPtr<FixedText> m_pNameLabel; + VclPtr<FixedText> m_pLocationLabel; VclPtr<Edit> m_pName; VclPtr<FixedText> m_pDuplicateNameError; @@ -67,6 +69,7 @@ namespace abp private: DECL_LINK( OnNameModified, Edit* ); DECL_LINK(OnRegister, void *); + DECL_LINK(OnEmbed, void *); bool isValidName() const; void implCheckName(); diff --git a/extensions/uiconfig/sabpilot/ui/datasourcepage.ui b/extensions/uiconfig/sabpilot/ui/datasourcepage.ui index cce60fe..0339bd7 100644 --- a/extensions/uiconfig/sabpilot/ui/datasourcepage.ui +++ b/extensions/uiconfig/sabpilot/ui/datasourcepage.ui @@ -34,13 +34,27 @@ Now, just enter the name under which you want to register the data source in %PR <property name="hexpand">True</property> <property name="row_spacing">6</property> <child> + <object class="GtkCheckButton" id="embed"> + <property name="label" translatable="yes">Embed this address book definition into the current document.</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> <object class="GtkGrid" id="grid4"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="column_spacing">12</property> <child> - <object class="GtkLabel" id="label1"> + <object class="GtkLabel" id="locationft"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="xalign">0</property> @@ -92,7 +106,7 @@ Now, just enter the name under which you want to register the data source in %PR </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="top_attach">1</property> <property name="width">1</property> <property name="height">1</property> </packing> @@ -108,7 +122,7 @@ Now, just enter the name under which you want to register the data source in %PR </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="top_attach">2</property> <property name="width">1</property> <property name="height">1</property> </packing> @@ -190,7 +204,7 @@ Now, just enter the name under which you want to register the data source in %PR </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">2</property> + <property name="top_attach">3</property> <property name="width">1</property> <property name="height">1</property> </packing> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits