diff options
author | Rachit Gupta <rachitgupta1792@gmail.com> | 2014-06-19 18:49:36 +0530 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2014-08-14 19:43:28 +0200 |
commit | 27f4c752d062df6c3f9c33c62e5de7c541aeca34 (patch) | |
tree | f51c878c5c0fff399e3ee809950c90be74655c2a | |
parent | 6f2136f5832c449d1f4eaa11e089e473ce94c964 (diff) |
Added functionality to apply default themes.
* The themes are stored in the share folder under the personas directory
in the gallery. The information is stored in a personas_list.txt which
contains the info in the form headerFile;footerFile;textColor;AccentColor
for the default themes.
* Changed the personalization_tab.ui to include _three_ buttons to show
the default images.
* Changed the vcl/source/app/settings.cxx to read the persona information
properly in the case of default personas.
* Some variable name changes.
Change-Id: Ib5f2167729a5fb7eb8061925679560accb934a44
-rw-r--r-- | cui/source/options/personalization.cxx | 81 | ||||
-rw-r--r-- | cui/source/options/personalization.hxx | 10 | ||||
-rw-r--r-- | cui/uiconfig/ui/personalization_tab.ui | 66 | ||||
-rw-r--r-- | vcl/source/app/settings.cxx | 8 |
4 files changed, 142 insertions, 23 deletions
diff --git a/cui/source/options/personalization.cxx b/cui/source/options/personalization.cxx index 928e32c9e117..65a312a88836 100644 --- a/cui/source/options/personalization.cxx +++ b/cui/source/options/personalization.cxx @@ -202,6 +202,17 @@ SvxPersonalizationTabPage::SvxPersonalizationTabPage( Window *pParent, const Sfx get( m_pSelectPersona, "select_persona" ); m_pSelectPersona->SetClickHdl( LINK( this, SvxPersonalizationTabPage, SelectPersona ) ); + + get( m_vDefaultPersonaImages[0], "default1" ); + m_vDefaultPersonaImages[0]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) ); + + get( m_vDefaultPersonaImages[1], "default2" ); + m_vDefaultPersonaImages[1]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) ); + + get( m_vDefaultPersonaImages[2], "default3" ); + m_vDefaultPersonaImages[2]->SetClickHdl( LINK( this, SvxPersonalizationTabPage, DefaultPersona ) ); + + LoadDefaultImages(); } SvxPersonalizationTabPage::~SvxPersonalizationTabPage() @@ -268,6 +279,45 @@ void SvxPersonalizationTabPage::Reset( const SfxItemSet * ) m_pDefaultPersona->Check(); } +void SvxPersonalizationTabPage::SetPersonaSettings( const OUString aPersonaSettings ) +{ + m_aPersonaSettings = aPersonaSettings; + m_pOwnPersona->Check(); +} + +void SvxPersonalizationTabPage::LoadDefaultImages() +{ + OUString gallery( "" ); + gallery = "$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER; + gallery += "/gallery/personas/"; + rtl::Bootstrap::expandMacros( gallery ); + OUString aPersonasList = gallery + "personas_list.txt"; + SvFileStream aStream( aPersonasList, STREAM_READ ); + GraphicFilter aFilter; + Graphic aGraphic; + sal_Int32 nIndex = 0; + + while( aStream.IsOpen() && !aStream.IsEof() ) + { + OString aLine; + aStream.ReadLine( aLine ); + OUString aPersonaSetting( OStringToOUString( aLine, RTL_TEXTENCODING_UTF8 ) ); + OUString aPreviewFile; + sal_Int32 nNewIndex = aPersonaSetting.indexOf( ';', 0 ); + if( nNewIndex < 0 ) + break; + aPreviewFile = aPersonaSetting.copy( 0, nNewIndex ); + aPersonaSetting = aPersonaSetting.copy( nNewIndex + 1 ); + m_vDefaultPersonaSettings.push_back( aPersonaSetting ); + + INetURLObject aURLObj( gallery + aPreviewFile ); + aFilter.ImportGraphic( aGraphic, aURLObj ); + Bitmap aBmp = aGraphic.GetBitmap(); + m_vDefaultPersonaImages[nIndex]->Show(); + m_vDefaultPersonaImages[nIndex++]->SetModeImage( Image( aBmp ) ); + } +} + IMPL_LINK( SvxPersonalizationTabPage, SelectPersona, PushButton*, /*pButton*/ ) { SelectPersonaDialog aDialog( NULL ); @@ -277,7 +327,7 @@ IMPL_LINK( SvxPersonalizationTabPage, SelectPersona, PushButton*, /*pButton*/ ) OUString aPersonaSetting( aDialog.GetAppliedPersonaSetting() ); if ( !aPersonaSetting.isEmpty() ) { - setPersonaSettings( aPersonaSetting ); + SetPersonaSettings( aPersonaSetting ); } break; @@ -294,6 +344,17 @@ IMPL_LINK( SvxPersonalizationTabPage, ForceSelect, RadioButton*, pButton ) return 0; } +IMPL_LINK( SvxPersonalizationTabPage, DefaultPersona, PushButton*, pButton ) +{ + m_pDefaultPersona->Check(); + for( sal_Int32 nIndex = 0; nIndex < 3; nIndex++ ) + { + if( pButton == m_vDefaultPersonaImages[nIndex] ) + m_aPersonaSettings = m_vDefaultPersonaSettings[nIndex]; + } + return 0; +} + /// Find the value on the Persona page, and convert it to a usable form. static OUString searchValue( const OString &rBuffer, sal_Int32 from, const OString &rIdentifier ) { @@ -351,12 +412,6 @@ static bool parsePersonaInfo( const OString &rBuffer, OUString *pHeaderURL, OUSt return true; } -void SvxPersonalizationTabPage::setPersonaSettings( const OUString aPersonaSettings ) -{ - m_aPersonaSettings = aPersonaSettings; - m_pOwnPersona->Check(); -} - SearchAndParseThread::SearchAndParseThread( SelectPersonaDialog* pDialog, const OUString& rURL ) : Thread( "cuiPersonasSearchThread" ), @@ -416,13 +471,13 @@ void SearchAndParseThread::execute() for( it = vLearnmoreURLs.begin(); it!=vLearnmoreURLs.end(); ++it ) { - OUString sHeaderFile, aPersonaSetting; - getPreviewFile( *it, &sHeaderFile, &aPersonaSetting ); - INetURLObject aURLObj( sHeaderFile ); + OUString sPreviewFile, aPersonaSetting; + getPreviewFile( *it, &sPreviewFile, &aPersonaSetting ); + INetURLObject aURLObj( sPreviewFile ); aFilter.ImportGraphic( aGraphic, aURLObj ); Bitmap aBmp = aGraphic.GetBitmap(); vResultList.push_back( Image( aBmp ) ); - m_pPersonaDialog->AddPersonaSetting(aPersonaSetting); + m_pPersonaDialog->AddPersonaSetting( aPersonaSetting ); } // for VCL to be able to do visual changes in the thread @@ -498,7 +553,7 @@ void SearchAndParseThread::execute() } } -void SearchAndParseThread::getPreviewFile( const OUString& rURL, OUString *pHeaderFile, OUString *pPersonaSetting ) +void SearchAndParseThread::getPreviewFile( const OUString& rURL, OUString *pPreviewFile, OUString *pPersonaSetting ) { uno::Reference< ucb::XSimpleFileAccess3 > xFileAccess( ucb::SimpleFileAccess::create( comphelper::getProcessComponentContext() ), uno::UNO_QUERY ); if ( !xFileAccess.is() ) @@ -555,7 +610,7 @@ void SearchAndParseThread::getPreviewFile( const OUString& rURL, OUString *pHead { return; } - *pHeaderFile = gallery + aPreviewFile; + *pPreviewFile = gallery + aPreviewFile; *pPersonaSetting = aName + ";" + aHeaderURL + ";" + aFooterURL + ";" + aTextColor + ";" + aAccentColor; } diff --git a/cui/source/options/personalization.hxx b/cui/source/options/personalization.hxx index 3b440760346e..0d211ed82d03 100644 --- a/cui/source/options/personalization.hxx +++ b/cui/source/options/personalization.hxx @@ -29,8 +29,11 @@ private: RadioButton *m_pDefaultPersona; ///< Use the built-in bitmap 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 OUString m_aPersonaSettings; ///< Header and footer images + color to be set in the settings. + std::vector<OUString> m_vDefaultPersonaSettings; + public: ::rtl::Reference< SearchAndParseThread > m_rApplyThread; SvxPersonalizationTabPage( Window *pParent, const SfxItemSet &rSet ); @@ -44,7 +47,9 @@ public: /// Reset to default settings ([Revert] button). virtual void Reset( const SfxItemSet *rSet ) SAL_OVERRIDE; - void setPersonaSettings( const OUString ); + void SetPersonaSettings( const OUString ); + + void LoadDefaultImages(); private: /// Handle the Persona selection @@ -52,6 +57,9 @@ private: /// When 'own' is chosen, but the Persona is not chosen yet. DECL_LINK( ForceSelect, RadioButton* ); + + /// Handle the default Persona selection + DECL_LINK( DefaultPersona, PushButton* ); }; /** Dialog that will allow the user to choose a Persona to use. diff --git a/cui/uiconfig/ui/personalization_tab.ui b/cui/uiconfig/ui/personalization_tab.ui index 307891c2edda..677d5fc13298 100644 --- a/cui/uiconfig/ui/personalization_tab.ui +++ b/cui/uiconfig/ui/personalization_tab.ui @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.16.1 --> <interface> - <!-- interface-requires gtk+ 3.0 --> + <requires lib="gtk+" version="3.0"/> <object class="GtkVBox" id="PersonalizationTabPage"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -22,6 +23,7 @@ <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="spacing">2</property> <property name="homogeneous">True</property> <child> <object class="GtkRadioButton" id="no_persona"> @@ -56,6 +58,66 @@ </packing> </child> <child> + <object class="GtkBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="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> + </packing> + </child> + <child> + <object class="GtkButton" id="default2"> + <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">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="default3"> + <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">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> <object class="GtkHBox" id="hbox1"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -94,7 +156,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> </object> diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx index 1c300d3ea7e2..42787205e5fa 100644 --- a/vcl/source/app/settings.cxx +++ b/vcl/source/app/settings.cxx @@ -2096,7 +2096,6 @@ static BitmapEx readBitmapEx( const OUString& rPath ) Graphic aGraphic; if ( GraphicFilter::LoadGraphic( aPath, OUString(), aGraphic ) != GRFILTER_OK ) return BitmapEx(); - return aGraphic.GetBitmapEx(); } @@ -2128,7 +2127,7 @@ static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFoot // now read the new values and setup bitmaps OUString aHeader, aFooter; - if ( aPersona == "own" ) + if ( aPersona == "own" || aPersona == "default" ) { sal_Int32 nIndex = 0; aHeader = aPersonaSettings.getToken( 0, ';', nIndex ); @@ -2142,11 +2141,6 @@ static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFoot rMenuBarTextColor = Color( aColor.toUInt64( 16 ) ); } } - else if ( aPersona == "default" ) - { - aHeader = "header.jpg"; - aFooter = "footer.jpg"; - } OUString aName; switch ( eWhich ) { |