[Libreoffice-commits] core.git: Branch 'feature/gsoc14-personas' - cui/source cui/uiconfig officecfg/registry vcl/source
Rachit Gupta
rachitgupta1792 at gmail.com
Fri Jun 27 11:28:36 PDT 2014
cui/source/options/personalization.cxx | 54 +++++++++
cui/source/options/personalization.hxx | 2
cui/uiconfig/ui/personalization_tab.ui | 76 +++++++++----
officecfg/registry/schema/org/openoffice/Office/Common.xcs | 23 +++
vcl/source/app/settings.cxx | 2
5 files changed, 137 insertions(+), 20 deletions(-)
New commits:
commit e62172ebbe41e0fe184e8a65c84dbd06f87bb01b
Author: Rachit Gupta <rachitgupta1792 at gmail.com>
Date: Fri Jun 27 23:52:42 2014 +0530
The Personas can be install through oxt extensions.
The user can install an oxt extension and choose his/her theme from
the Personalization page.
* Created a template in Common.xcs registry to hold the values for the
PersonasList set.
* Added 3 buttons to personalization_tab.ui to incorporate the latest 3
personas installed through extensions.
* Currently, only 3 installed personas are shown alongwith the default
available personas.
Change-Id: I30a40ae48d17f4ed8caef33854ef88afcbec5a54
diff --git a/cui/source/options/personalization.cxx b/cui/source/options/personalization.cxx
index ccccec7..1cc8b75 100644
--- a/cui/source/options/personalization.cxx
+++ b/cui/source/options/personalization.cxx
@@ -14,6 +14,8 @@
#include <comphelper/processfactory.hxx>
#include <officecfg/Office/Common.hxx>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <osl/file.hxx>
#include <rtl/bootstrap.hxx>
#include <tools/urlobj.hxx>
@@ -31,6 +33,7 @@
using namespace com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ucb;
+using namespace ::com::sun::star::beans;
SelectPersonaDialog::SelectPersonaDialog( Window *pParent )
: ModalDialog( pParent, "SelectPersonaDialog", "cui/ui/select_persona_dialog.ui" )
@@ -241,6 +244,15 @@ SvxPersonalizationTabPage::SvxPersonalizationTabPage( Window *pParent, const Sfx
get( m_vDefaultPersonaImages[2], "default3" );
m_vDefaultPersonaImages[2]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) );
+ get( m_vExtensionPersonas[0], "extension1" );
+ m_vExtensionPersonas[0]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) );
+
+ get( m_vExtensionPersonas[1], "extension2" );
+ m_vExtensionPersonas[1]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) );
+
+ get( m_vExtensionPersonas[2], "extension3" );
+ m_vExtensionPersonas[2]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) );
+
LoadDefaultImages();
}
@@ -273,7 +285,6 @@ bool SvxPersonalizationTabPage::FillItemSet( SfxItemSet & )
// write
boost::shared_ptr< comphelper::ConfigurationChanges > batch( comphelper::ConfigurationChanges::create() );
-
officecfg::Office::Common::Misc::Persona::set( aPersona, batch );
officecfg::Office::Common::Misc::PersonaSettings::set( m_aPersonaSettings, batch );
batch->commit();
@@ -316,6 +327,8 @@ void SvxPersonalizationTabPage::SetPersonaSettings( const OUString aPersonaSetti
void SvxPersonalizationTabPage::LoadDefaultImages()
{
+ // Load the pre saved personas
+
OUString gallery( "" );
gallery = "$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER;
gallery += "/gallery/personas/";
@@ -345,6 +358,38 @@ void SvxPersonalizationTabPage::LoadDefaultImages()
m_vDefaultPersonaImages[nIndex]->Show();
m_vDefaultPersonaImages[nIndex++]->SetModeImage( Image( aBmp ) );
}
+
+ // See if any extensions are used to install personas. If yes, load them.
+
+ css::uno::Sequence<OUString> installedPersonas( officecfg::Office::Common::Misc::PersonasList::get()->getElementNames() );
+ sal_Int32 nLength = installedPersonas.getLength();
+ sal_Int32 nCount = 0;
+ nIndex = 0;
+
+ if( nLength == 0 )
+ return;
+
+ if( nLength > 3 )
+ nIndex = nLength - 3;
+
+ for( ; nIndex < nLength; nIndex++ )
+ {
+ Reference< XPropertySet > xPropertySet( officecfg::Office::Common::Misc::PersonasList::get()->getByName( installedPersonas[nIndex] ), UNO_QUERY_THROW );
+ Any aValue = xPropertySet->getPropertyValue( "PersonaPreview" );
+ OUString aPreviewFile;
+ aValue >>= aPreviewFile;
+ INetURLObject aURLObj( aPreviewFile );
+ aFilter.ImportGraphic( aGraphic, aURLObj );
+ Bitmap aBmp = aGraphic.GetBitmap();
+ m_vExtensionPersonas[nCount]->Show();
+ m_vExtensionPersonas[nCount++]->SetModeImage( Image( aBmp ) );
+
+ aValue = xPropertySet->getPropertyValue( "PersonaSettings" );
+ OUString sPersonaSettings;
+ aValue >>= sPersonaSettings;
+ rtl::Bootstrap::expandMacros( sPersonaSettings );
+ m_vExtensionPersonaSettings.push_back( sPersonaSettings );
+ }
}
IMPL_LINK( SvxPersonalizationTabPage, SelectPersona, PushButton*, /*pButton*/ )
@@ -381,6 +426,13 @@ IMPL_LINK( SvxPersonalizationTabPage, DefaultPersona, PushButton*, pButton )
if( pButton == m_vDefaultPersonaImages[nIndex] )
m_aPersonaSettings = m_vDefaultPersonaSettings[nIndex];
}
+
+ for( sal_Int32 nIndex = 0; nIndex < 3; nIndex++ )
+ {
+ if( pButton == m_vExtensionPersonas[nIndex] )
+ m_aPersonaSettings = m_vExtensionPersonaSettings[nIndex];
+ }
+
return 0;
}
diff --git a/cui/source/options/personalization.hxx b/cui/source/options/personalization.hxx
index 1254e82..0865037 100644
--- a/cui/source/options/personalization.hxx
+++ b/cui/source/options/personalization.hxx
@@ -30,9 +30,11 @@ private:
RadioButton *m_pOwnPersona; ///< Use the user-defined bitmap
PushButton *m_pSelectPersona; ///< Let the user select in the 'own' case
PushButton *m_vDefaultPersonaImages[3]; ///< Buttons to show the default persona images
+ PushButton *m_vExtensionPersonas[3]; ///< Buttons to show the last 3 personas installed via extensions
OUString m_aPersonaSettings; ///< Header and footer images + color to be set in the settings.
std::vector<OUString> m_vDefaultPersonaSettings;
+ std::vector<OUString> m_vExtensionPersonaSettings;
public:
::rtl::Reference< SearchAndParseThread > m_rApplyThread;
diff --git a/cui/uiconfig/ui/personalization_tab.ui b/cui/uiconfig/ui/personalization_tab.ui
index 677d5fc..e2f4332 100644
--- a/cui/uiconfig/ui/personalization_tab.ui
+++ b/cui/uiconfig/ui/personalization_tab.ui
@@ -58,24 +58,23 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box1">
+ <object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">6</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
<child>
<object class="GtkButton" id="default1">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -84,14 +83,12 @@
<property name="receives_default">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -100,19 +97,62 @@
<property name="receives_default">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="extension1">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="extension2">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="extension3">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 866ad15..d5e926b 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -806,6 +806,24 @@
<value/>
</prop>
</group>
+ <group oor:name="PersonasEntry">
+ <info>
+ <desc>Stores the details of the installed personas.</desc>
+ </info>
+ <prop oor:name="PersonaPreview" oor:type="xs:string" oor:nillable="false">
+ <info>
+ <desc>Name of the preview file for the Persona to show in the UI</desc>
+ </info>
+ </prop>
+ <prop oor:name="PersonaSettings" oor:type="xs:string" oor:nillable="false">
+ <info>
+ <desc>Names of the header and footer images, and colors for text and
+ accent. When set, the value has form
+ "header.jpg;footer.jpg;#RGBTXT;#RGBACC".</desc>
+ </info>
+ <value/>
+ </prop>
+ </group>
</templates>
<component>
<group oor:name="InternalMSExport">
@@ -5738,6 +5756,11 @@
<desc>List of names of the CMIS servers in the place edition dialog.</desc>
</info>
</prop>
+ <set oor:name="PersonasList" oor:node-type="PersonasEntry">
+ <info>
+ <desc>Contains the Personas installed through extensions</desc>
+ </info>
+ </set>
</group>
<group oor:name="Forms">
<info>
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index ceab2f6..b358125 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -2153,7 +2153,7 @@ static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFoot
rtl::Bootstrap::expandMacros( gallery );
gallery += "/user/gallery/personas/";
}
- else if (aPersona == "default")
+ else if ( aPersona == "default" && !aPersonaSettings.startsWith( "vnd.sun.star.expand" ) )
{
gallery = "$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER;
gallery += "/gallery/personas/";
More information about the Libreoffice-commits
mailing list