[Libreoffice-commits] .: Branch 'libreoffice-3-4' - 2 commits - cui/source

Michael Meeks mmeeks at kemper.freedesktop.org
Mon Apr 4 10:20:13 PDT 2011


 cui/source/dialogs/about.cxx |  299 ++++++++++++++++++-------------------------
 cui/source/dialogs/about.hrc |   12 +
 cui/source/dialogs/about.src |   40 ++++-
 cui/source/inc/about.hxx     |   29 ++--
 4 files changed, 182 insertions(+), 198 deletions(-)

New commits:
commit 34a48f3809c534a47c65d22a7db6b52d6ff46dee
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Mon Apr 4 18:06:02 2011 +0100

    restore the build-id setup code, and clean hrc file

diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx
index 2a09ff9..cd2e416 100644
--- a/cui/source/dialogs/about.cxx
+++ b/cui/source/dialogs/about.cxx
@@ -72,11 +72,70 @@ Image SfxApplication::GetApplicationLogo()
     return Image( aBitmap );
 }
 
+/* intense magic to get strong version information */
 static String
-GetVersionStr()
+GetBuildId()
 {
-    // FIXME: fill me in from sfx2/source/appl/appserv.cxx code ...
-    return String();
+    const String sCWSSchema( String::CreateFromAscii( "[CWS:" ) );
+    rtl::OUString sDefault;
+    String sBuildId( utl::Bootstrap::getBuildIdData( sDefault ) );
+    OSL_ENSURE( sBuildId.Len() > 0, "No BUILDID in bootstrap file" );
+    if ( sBuildId.Len() > 0 && sBuildId.Search( sCWSSchema ) == STRING_NOTFOUND )
+    {
+        // no cws part in brand buildid -> try basis buildid
+        rtl::OUString sBasisBuildId( DEFINE_CONST_OUSTRING("${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":buildid}" ) );
+        rtl::Bootstrap::expandMacros( sBasisBuildId );
+        sal_Int32 nIndex = sBasisBuildId.indexOf( sCWSSchema );
+        if ( nIndex != -1 )
+            sBuildId += String( sBasisBuildId.copy( nIndex ) );
+    }
+
+    String sProductSource( utl::Bootstrap::getProductSource( sDefault ) );
+    OSL_ENSURE( sProductSource.Len() > 0, "No ProductSource in bootstrap file" );
+
+    // the product source is something like "DEV300", where the
+    // build id is something like "300m12(Build:12345)". For better readability,
+    // strip the duplicate UPD ("300").
+    if ( sProductSource.Len() )
+    {
+        bool bMatchingUPD =
+            ( sProductSource.Len() >= 3 )
+            &&  ( sBuildId.Len() >= 3 )
+            &&  ( sProductSource.Copy( sProductSource.Len() - 3 ) == sBuildId.Copy( 0, 3 ) );
+        OSL_ENSURE( bMatchingUPD, "BUILDID and ProductSource do not match in their UPD" );
+        if ( bMatchingUPD )
+            sProductSource = sProductSource.Copy( 0, sProductSource.Len() - 3 );
+
+        // prepend the product source
+        sBuildId.Insert( sProductSource, 0 );
+    }
+
+    // Version information (in about box) (#i94693#)
+    /* if the build ids of the basis or ure layer are different from the build id
+     * of the brand layer then show them */
+    rtl::OUString aBasisProductBuildId( DEFINE_CONST_OUSTRING("${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":ProductBuildid}" ) );
+    rtl::Bootstrap::expandMacros( aBasisProductBuildId );
+    rtl::OUString aUREProductBuildId( DEFINE_CONST_OUSTRING("${$URE_BIN_DIR/" SAL_CONFIGFILE("version") ":ProductBuildid}" ) );
+    rtl::Bootstrap::expandMacros( aUREProductBuildId );
+    if ( sBuildId.Search( String( aBasisProductBuildId ) ) == STRING_NOTFOUND
+         || sBuildId.Search( String( aUREProductBuildId ) ) == STRING_NOTFOUND )
+    {
+        String sTemp( '-' );
+        sTemp += String( aBasisProductBuildId );
+        sTemp += '-';
+        sTemp += String( aUREProductBuildId );
+        sBuildId.Insert( sTemp, sBuildId.Search( ')' ) );
+    }
+
+    // the build id format is "milestone(build)[cwsname]". For readability, it would
+    // be nice to have some more spaces in there.
+    xub_StrLen nPos = 0;
+    if ( ( nPos = sBuildId.Search( sal_Unicode( '(' ) ) ) != STRING_NOTFOUND )
+        sBuildId.Insert( sal_Unicode( ' ' ), nPos );
+    if ( ( nPos = sBuildId.Search( sal_Unicode( '[' ) ) ) != STRING_NOTFOUND )
+        sBuildId.Insert( sal_Unicode( ' ' ), nPos );
+
+    return sBuildId;
 }
 
 AboutDialog::AboutDialog( Window* pParent, const ResId& rId) :
@@ -111,7 +170,7 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId) :
     String sVersion = aVersionTextStr;
     sVersion.SearchAndReplaceAscii( "$(VER)", Application::GetDisplayName() );
     sVersion += '\n';
-    sVersion += GetVersionStr();
+    sVersion += GetBuildId();
 #ifdef BUILD_VER_STRING
     String aBuildString( DEFINE_CONST_UNICODE( BUILD_VER_STRING ) );
     sVersion += '\n';
diff --git a/cui/source/dialogs/about.hrc b/cui/source/dialogs/about.hrc
index b98d03f..7a74954 100644
--- a/cui/source/dialogs/about.hrc
+++ b/cui/source/dialogs/about.hrc
@@ -27,8 +27,12 @@
 
 #include <sfx2/sfx.hrc>
 
-#define ABOUT_BTN_OK                        1
-#define ABOUT_FTXT_VERSION                  1
-#define ABOUT_STR_ACCEL                     3
-#define ABOUT_FTXT_COPYRIGHT					4
+#define ABOUT_BTN_OK		1
+#define ABOUT_FTXT_VERSION	2
+#define ABOUT_STR_ACCEL		3
+#define ABOUT_FTXT_COPYRIGHT	4
 
+#define ABOUT_FTXT_LINK		5
+#define ABOUT_STR_VERSION	6
+#define ABOUT_STR_COPYRIGHT	7
+#define ABOUT_STR_LINK		8
commit dac9c2c8642c4edeff10a3250f96d1a86e6a2640
Author: Michael Meeks <michael.meeks at novell.com>
Date:   Mon Apr 4 18:02:18 2011 +0100

    Switch to the LibreOffice about dialog instead

diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx
index a1de647..2a09ff9 100644
--- a/cui/source/dialogs/about.cxx
+++ b/cui/source/dialogs/about.cxx
@@ -1,7 +1,8 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /*************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
+ *
  * Copyright 2000, 2010 Oracle and/or its affiliates.
  *
  * OpenOffice.org - a multi-platform office productivity suite
@@ -25,29 +26,37 @@
  *
  ************************************************************************/
 
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_cui.hxx"
-
 // include ---------------------------------------------------------------
 
 #include <vcl/svapp.hxx>
 #include <vcl/msgbox.hxx>
+
 #include <tools/stream.hxx>
 #include <tools/urlobj.hxx>
 #include <rtl/bootstrap.hxx>
 #include <unotools/configmgr.hxx>
 #include <unotools/bootstrap.hxx>
 #include <com/sun/star/uno/Any.h>
+#include <unotools/configmgr.hxx>
+#include <vcl/svapp.hxx>
 #include <vcl/graph.hxx>
 #include <svtools/filter.hxx>
+
+#include "com/sun/star/system/SystemShellExecuteFlags.hpp"
+#include "com/sun/star/system/XSystemShellExecute.hpp"
+#include <comphelper/processfactory.hxx>
+#include "comphelper/anytostring.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "cppuhelper/bootstrap.hxx"
+
 #include <sfx2/sfxuno.hxx>
+#include <sfx2/sfxcommands.h>
 #include "about.hxx"
+#include "about.hrc"
 #include <sfx2/sfxdefs.hxx>
 #include <sfx2/app.hxx>
-#include <sfx2/sfxcommands.h>
-#include "about.hrc"
-#include <dialmgr.hxx>
-#include <svtools/svtools.hrc>
+
+using namespace ::com::sun::star;
 
 // defines ---------------------------------------------------------------
 
@@ -55,138 +64,62 @@
 #define SPACE_OFFSET	5
 #define SCROLL_TIMER	30
 
-#define WELCOME_URL     DEFINE_CONST_UNICODE( "http://www.openoffice.org/welcome/credits.html" )
-
-// class AboutDialog -----------------------------------------------------
-static void layoutText( FixedInfo &rText, long &nY, long nTextWidth, Size a6Size )
+/** loads the application logo as used in the about dialog and impress slideshow pause screen */
+Image SfxApplication::GetApplicationLogo()
 {
-    Point aTextPos = rText.GetPosPixel();
-    aTextPos.X() = a6Size.Width() * 2;
-    aTextPos.Y() = nY;
-    rText.SetPosPixel( aTextPos );
-
-    Size aTxtSiz = rText.GetSizePixel();
-    aTxtSiz.Width() = nTextWidth;
-    Size aCalcSize = rText.CalcMinimumSize( nTextWidth );
-    aTxtSiz.Height() = aCalcSize.Height();
-    rText.SetSizePixel( aTxtSiz );
-
-    nY += aTxtSiz.Height();
+    BitmapEx aBitmap;
+    Application::LoadBrandBitmap ("about", aBitmap);
+    return Image( aBitmap );
 }
 
-String InitDevVersionStr()
+static String
+GetVersionStr()
 {
-    const String sCWSSchema( String::CreateFromAscii( "[CWS:" ) );
-    rtl::OUString sDefault;
-    String sBuildId( utl::Bootstrap::getBuildIdData( sDefault ) );
-    OSL_ENSURE( sBuildId.Len() > 0, "No BUILDID in bootstrap file" );
-    if ( sBuildId.Len() > 0 && sBuildId.Search( sCWSSchema ) == STRING_NOTFOUND )
-    {
-        // no cws part in brand buildid -> try basis buildid
-        rtl::OUString sBasisBuildId( DEFINE_CONST_OUSTRING(
-            "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":buildid}" ) );
-        rtl::Bootstrap::expandMacros( sBasisBuildId );
-        sal_Int32 nIndex = sBasisBuildId.indexOf( sCWSSchema );
-        if ( nIndex != -1 )
-            sBuildId += String( sBasisBuildId.copy( nIndex ) );
-    }
-
-    String sProductSource( utl::Bootstrap::getProductSource( sDefault ) );
-    OSL_ENSURE( sProductSource.Len() > 0, "No ProductSource in bootstrap file" );
-
-    // the product source is something like "DEV300", where the
-    // build id is something like "300m12(Build:12345)". For better readability,
-    // strip the duplicate UPD ("300").
-    if ( sProductSource.Len() )
-    {
-        bool bMatchingUPD =
-                ( sProductSource.Len() >= 3 )
-            &&  ( sBuildId.Len() >= 3 )
-            &&  ( sProductSource.Copy( sProductSource.Len() - 3 ) == sBuildId.Copy( 0, 3 ) );
-        OSL_ENSURE( bMatchingUPD, "BUILDID and ProductSource do not match in their UPD" );
-        if ( bMatchingUPD )
-            sProductSource = sProductSource.Copy( 0, sProductSource.Len() - 3 );
-
-        // prepend the product source
-        sBuildId.Insert( sProductSource, 0 );
-    }
-
-    // --> PB 2008-10-30 #i94693#
-    // if the build ids of the basis or ure layer are different from the build id
-    // of the brand layer then show them
-    rtl::OUString aBasisProductBuildId( DEFINE_CONST_OUSTRING(
-        "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":ProductBuildid}" ) );
-    rtl::Bootstrap::expandMacros( aBasisProductBuildId );
-    rtl::OUString aUREProductBuildId( DEFINE_CONST_OUSTRING(
-        "${$URE_BIN_DIR/" SAL_CONFIGFILE("version") ":ProductBuildid}" ) );
-    rtl::Bootstrap::expandMacros( aUREProductBuildId );
-    if ( sBuildId.Search( String( aBasisProductBuildId ) ) == STRING_NOTFOUND
-        || sBuildId.Search( String( aUREProductBuildId ) ) == STRING_NOTFOUND )
-    {
-        String sTemp( '-' );
-        sTemp += String( aBasisProductBuildId );
-        sTemp += '-';
-        sTemp += String( aUREProductBuildId );
-        sBuildId.Insert( sTemp, sBuildId.Search( ')' ) );
-    }
-    // <--
-
-    // the build id format is "milestone(build)[cwsname]". For readability, it would
-    // be nice to have some more spaces in there.
-    xub_StrLen nPos = 0;
-    if ( ( nPos = sBuildId.Search( sal_Unicode( '(' ) ) ) != STRING_NOTFOUND )
-        sBuildId.Insert( sal_Unicode( ' ' ), nPos );
-    if ( ( nPos = sBuildId.Search( sal_Unicode( '[' ) ) ) != STRING_NOTFOUND )
-        sBuildId.Insert( sal_Unicode( ' ' ), nPos );
-    return sBuildId;
+    // FIXME: fill me in from sfx2/source/appl/appserv.cxx code ...
+    return String();
 }
 
-AboutDialog::AboutDialog( Window* pParent, const ResId& rId ) :
+AboutDialog::AboutDialog( Window* pParent, const ResId& rId) :
 
     SfxModalDialog	( pParent, 	rId ),
 
     aOKButton      	( this,		ResId( ABOUT_BTN_OK, *rId.GetResMgr() ) ),
     aVersionText 	( this, 	ResId( ABOUT_FTXT_VERSION, *rId.GetResMgr() ) ),
-    aCopyrightText  ( this,     ResId( ABOUT_FTXT_COPYRIGHT, *rId.GetResMgr() ) ),
-    aBuildData      ( this ),
-    pDeveloperAry(0),
+    aCopyrightText	( this, 	ResId( ABOUT_FTXT_COPYRIGHT, *rId.GetResMgr() ) ),
+    aInfoLink       ( this,     ResId( ABOUT_FTXT_LINK, *rId.GetResMgr() ) ),
     aAccelStr		( 			ResId( ABOUT_STR_ACCEL, *rId.GetResMgr() ) ),
+    aVersionTextStr(            ResId( ABOUT_STR_VERSION, *rId.GetResMgr() ) ),
+    aCopyrightTextStr(          ResId( ABOUT_STR_COPYRIGHT, *rId.GetResMgr() ) ),
+    aLinkStr        (           ResId( ABOUT_STR_LINK, *rId.GetResMgr() ) ),
     aTimer          (),
     nOff            ( 0 ),
     m_nDeltaWidth   ( 0 ),
-    m_nPendingScrolls( 0 ),
-    bNormal         ( sal_True )
+    m_nPendingScrolls( 0 )
 {
-    aDevVersionStr = InitDevVersionStr();
-
-    ::com::sun::star::lang::Locale aLocale;
-    ResMgr* pResMgr = ResMgr::SearchCreateResMgr( "about", aLocale );
-    if ( pResMgr )
-    {
-        aCopyrightTextStr = String( ResId( ABOUT_STR_COPYRIGHT, *pResMgr ) );
-//        pDeveloperAry = new ResStringArray( ResId( ABOUT_STR_DEVELOPER_ARY, *pResMgr ) );
-        delete pResMgr;
-    }
-
     rtl::OUString sProduct;
     utl::ConfigManager::GetDirectConfigProperty(utl::ConfigManager::PRODUCTNAME) >>= sProduct;
 
     // load image from module path
     aAppLogo = SfxApplication::GetApplicationLogo();
 
-    // Transparenter Font
+    // Transparent Font
     Font aFont = GetFont();
     aFont.SetTransparent( sal_True );
     SetFont( aFont );
 
     // if necessary more info
-    String sVersion = aVersionText.GetText();
+    String sVersion = aVersionTextStr;
     sVersion.SearchAndReplaceAscii( "$(VER)", Application::GetDisplayName() );
     sVersion += '\n';
-    sVersion += aDevVersionStr;
+    sVersion += GetVersionStr();
+#ifdef BUILD_VER_STRING
+    String aBuildString( DEFINE_CONST_UNICODE( BUILD_VER_STRING ) );
+    sVersion += '\n';
+    sVersion += aBuildString;
+#endif
     aVersionText.SetText( sVersion );
 
-    // Initialisierung fuer Aufruf Entwickler
+    // Initialization call for developers
     if ( aAccelStr.Len() && ByteString(U2S(aAccelStr)).IsAlphaAscii() )
     {
         Accelerator	*pAccel = 0, *pPrevAccel = 0, *pFirstAccel = 0;
@@ -196,7 +129,7 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId ) :
         {
             pPrevAccel = pAccel;
             pAccel = new Accelerator;
-            aAccelList.Insert( pAccel, LIST_APPEND );
+            aAccelList.push_back( pAccel );
             sal_uInt16 nKey = aAccelStr.GetChar(i) - 'A' + KEY_A;
             pAccel->InsertItem( 1, KeyCode( nKey, KEY_MOD1 ) );
             if ( i > 0 )
@@ -221,58 +154,72 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId ) :
 
     aVersionText.SetBackground();
     aCopyrightText.SetBackground();
+    aInfoLink.SetURL( aLinkStr );
+    aInfoLink.SetBackground();
+    aInfoLink.SetClickHdl( LINK( this, AboutDialog, HandleHyperlink ) );
 
     Color aTextColor( rSettings.GetWindowTextColor() );
     aVersionText.SetControlForeground( aTextColor );
     aCopyrightText.SetControlForeground( aTextColor );
-    aBuildData.SetBackground( aWall );
-
-    Font aSmallFont = rSettings.GetInfoFont();
-    Size aSmaller = aNewFont.GetSize();
-    aSmaller.Width() = (long) (aSmaller.Width() * 0.75);
-    aSmaller.Height() = (long) (aSmaller.Height() * 0.75);
-    aNewFont.SetSize( aSmaller );
-    aBuildData.SetFont( aNewFont );
-    aBuildData.SetBackground( aWall );
-#ifdef BUILD_VER_STRING
-    String aBuildString( DEFINE_CONST_UNICODE( BUILD_VER_STRING ) );
-#else
-    String aBuildString;
-#endif
-    aBuildData.SetText( aBuildString );
-    aBuildData.Show();
+
+    aCopyrightText.SetText( aCopyrightTextStr );
 
     // determine size and position of the dialog & elements
     Size aAppLogoSiz = aAppLogo.GetSizePixel();
+
+    if (aAppLogoSiz.Width() < 300)
+        aAppLogoSiz.Width() = 300;
+
     Size aOutSiz     = GetOutputSizePixel();
     aOutSiz.Width()  = aAppLogoSiz.Width();
 
+    // analyze size of the aVersionText widget
+    // character size
     Size a6Size      = aVersionText.LogicToPixel( Size( 6, 6 ), MAP_APPFONT );
+    // preferred Version widget size
+    Size aVTSize = aVersionText.CalcMinimumSize();
     long nY          = aAppLogoSiz.Height() + ( a6Size.Height() * 2 );
-    long nDlgMargin  = a6Size.Width() * 4 ;
-    long nCtrlMargin = a6Size.Height() * 2;
+    long nDlgMargin  = a6Size.Width() * 3 ;
+    long nCtrlMargin = aVTSize.Height() + ( a6Size.Height() * 2 );
     long nTextWidth  = aOutSiz.Width() - nDlgMargin;
 
-    aCopyrightText.SetText( aCopyrightTextStr );
+    // finally set the aVersionText widget position and size
+    Size aVTCopySize = aVTSize;
+    Point aVTCopyPnt;
+    aVTCopySize.Width()  = nTextWidth;
+    aVTCopyPnt.X() = ( aOutSiz.Width() - aVTCopySize.Width() ) / 2;
+    aVTCopyPnt.Y() = nY;
+    aVersionText.SetPosSizePixel( aVTCopyPnt, aVTCopySize );
     
-    layoutText( aVersionText, nY, nTextWidth, a6Size );
     nY += nCtrlMargin;
     
     // OK-Button-Position (at the bottom and centered)
     Size aOKSiz = aOKButton.GetSizePixel();
     Point aOKPnt = aOKButton.GetPosPixel();
     
+    // FixedHyperlink with more info link
+    Point aLinkPnt = aInfoLink.GetPosPixel();
+    Size aLinkSize = aInfoLink.GetSizePixel();
+
     // Multiline edit with Copyright-Text
     Point aCopyPnt = aCopyrightText.GetPosPixel();
     Size aCopySize = aCopyrightText.GetSizePixel();
     aCopySize.Width()  = nTextWidth;
-    aCopySize.Height() = aOutSiz.Height() - nY - ( aOKSiz.Height() * 2 ) - nCtrlMargin;
+    aCopySize.Height() = aOutSiz.Height() - nY - ( aOKSiz.Height() * 2 ) - 3*aLinkSize.Height() - nCtrlMargin;
 
     aCopyPnt.X() = ( aOutSiz.Width() - aCopySize.Width() ) / 2;
     aCopyPnt.Y() = nY;
     aCopyrightText.SetPosSizePixel( aCopyPnt, aCopySize );
 
-    nY += aCopySize.Height() + nCtrlMargin;
+    nY += aCopySize.Height() + aLinkSize.Height();
+
+    aLinkSize.Width() = aInfoLink.CalcMinimumSize().Width();
+    aLinkPnt.X() = ( aOutSiz.Width() - aLinkSize.Width() ) / 2;
+    aLinkPnt.Y() = nY;
+    aInfoLink.SetPosSizePixel( aLinkPnt, aLinkSize );
+
+    nY += aLinkSize.Height() + nCtrlMargin;
+
     aOKPnt.X() = ( aOutSiz.Width() - aOKSiz.Width() ) / 2;
     aOKPnt.Y() = nY;
     aOKButton.SetPosPixel( aOKPnt );
@@ -282,6 +229,7 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId ) :
 
     FreeResource();
 
+    // explicit Help-Id
     SetHelpId( CMD_SID_ABOUT );
 }
 
@@ -289,18 +237,14 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId ) :
 
 AboutDialog::~AboutDialog()
 {
-    // L"oschen des Entwickleraufrufs
-    delete pDeveloperAry;
-    if ( aAccelList.Count() )
+    // Clearing the developers call
+    if ( !aAccelList.empty() )
     {
-        GetpApp()->RemoveAccel( aAccelList.First() );
-        Accelerator* pAccel = aAccelList.Last();
+        GetpApp()->RemoveAccel( aAccelList.front() );
 
-        while ( pAccel )
-        {
-            delete pAccel;
-            pAccel = aAccelList.Prev();
-        }
+        for ( size_t i = 0, n = aAccelList.size(); i < n; ++i )
+            delete aAccelList[ i ];
+        aAccelList.clear();
     }
 }
 
@@ -318,11 +262,6 @@ IMPL_LINK( AboutDialog, TimerHdl, Timer *, pTimer )
 
 IMPL_LINK( AboutDialog, AccelSelectHdl, Accelerator *, pAccelerator )
 {
-#ifdef YURI_DARIO
-    aCopyrightText.SetHelpText( DEFINE_CONST_UNICODE("Conoscere qualcuno ovunque egli sia, con cui comprendersi nonostante le distanze\n"
-                      "e le differenze, puo' trasformare la terra in un giardino. baci Valeria") );
-#endif
-
     (void)pAccelerator; //unused
     // init Timer
     aTimer.SetTimeoutHdl( LINK( this, AboutDialog, TimerHdl ) );
@@ -331,7 +270,6 @@ IMPL_LINK( AboutDialog, AccelSelectHdl, Accelerator *, pAccelerator )
     nOff = GetOutputSizePixel().Height();
     MapMode aMapMode( MAP_PIXEL );
     SetMapMode( aMapMode );
-    bNormal = sal_False;
 
     // start scroll Timer
     aTimer.SetTimeout( SCROLL_TIMER );
@@ -341,85 +279,47 @@ IMPL_LINK( AboutDialog, AccelSelectHdl, Accelerator *, pAccelerator )
 
 // -----------------------------------------------------------------------
 
-sal_Bool AboutDialog::Close()
+IMPL_LINK( AboutDialog, HandleHyperlink, svt::FixedHyperlink*, pHyperlink )
 {
-    // stop Timer and finish the dialog
-    aTimer.Stop();
-    EndDialog( RET_OK );
-    return( sal_False );
-}
+    rtl::OUString sURL=pHyperlink->GetURL();
+    rtl::OUString sTitle=GetText();
 
-// -----------------------------------------------------------------------
+    if ( ! sURL.getLength() ) // Nothing to do, when the URL is empty
+        return 1;
+    try
+    {
+        uno::Reference< com::sun::star::system::XSystemShellExecute > xSystemShellExecute(
+            ::comphelper::getProcessServiceFactory()->createInstance(
+                DEFINE_CONST_UNICODE("com.sun.star.system.SystemShellExecute") ), uno::UNO_QUERY_THROW );
+        xSystemShellExecute->execute( sURL, rtl::OUString(),  com::sun::star::system::SystemShellExecuteFlags::DEFAULTS );
+    }
+    catch ( uno::Exception& )
+    {
+        uno::Any exc( ::cppu::getCaughtException() );
+        rtl::OUString msg( ::comphelper::anyToString( exc ) );
+        const SolarMutexGuard guard;
+        ErrorBox aErrorBox( NULL, WB_OK, msg );
+        aErrorBox.SetText( sTitle );
+        aErrorBox.Execute();
+    }
+
+    return 1;
+}
 
 void AboutDialog::Paint( const Rectangle& rRect )
 {
     SetClipRegion( rRect );
 
-    if ( bNormal ) // not in scroll mode
-    {
-        Point aPos( m_nDeltaWidth / 2, 0 );
-        DrawImage( aPos, aAppLogo );
-        return;
-    }
-
-    // scroll the content
-    const int nDeltaY = -SCROLL_OFFSET * m_nPendingScrolls;
-    if( !nDeltaY )
-        return;
-    nOff += nDeltaY;
-    Scroll( 0, nDeltaY, SCROLL_NOERASE );
-    m_nPendingScrolls = 0;
-
-    // draw the credits text
-    const Font aOrigFont = GetFont();
-    const int nFullWidth = GetOutputSizePixel().Width();
-
-    int nY = nOff;
-//    const int nDevCnt = static_cast<int>( pDeveloperAry->Count() );
-    const int nDevCnt = 0;
-    for( int i = 0; i < nDevCnt; ++i )
-    {
-        if( nY >= rRect.Bottom() )
-            break;
-
-        int nPos2 = nY + GetTextHeight() + 3;
-        if( nPos2 >= rRect.Top() + nDeltaY )
-        {
-            const String aStr = pDeveloperAry->GetString(i);
-            const long nVal = pDeveloperAry->GetValue(i);
-
-            if ( nVal )
-            {
-                // emphasize the headers
-                Font aFont = aOrigFont;
-                aFont.SetWeight( (FontWeight)nVal );
-                SetFont( aFont );
-                nPos2 = nY + GetTextHeight() + 3;
-            }
-
-            // clear text background
-            Rectangle aEraseRect( Point(0,nY), Size( nFullWidth, nPos2-nY));
-            Erase( aEraseRect );
-
-            // draw centered text
-            const long nTextWidth = GetTextWidth( aStr );
-            long nX = (nFullWidth - 5 - nTextWidth) / 2;
-            if( nX < 0 )
-                nX = SPACE_OFFSET;
-            const Point aPnt( nX, nY );
-            DrawText( aPnt, aStr );
-
-            // restore the font if needed
-            if( nVal )
-                SetFont( aOrigFont );
-        }
-        nY = nPos2;
-    }
+    Point aPos( m_nDeltaWidth / 2, 0 );
+    DrawImage( aPos, aAppLogo );
+}
 
-    // close dialog if the whole text has been scrolled
-    if ( nY <= 0 )
-    {
-        bNormal = sal_True;
-        Close();
-    }
+sal_Bool AboutDialog::Close()
+{
+    // stop Timer and finish the dialog
+    aTimer.Stop();
+    EndDialog( RET_OK );
+    return sal_False;
 }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/dialogs/about.src b/cui/source/dialogs/about.src
index fb6466e..1bea545 100644
--- a/cui/source/dialogs/about.src
+++ b/cui/source/dialogs/about.src
@@ -29,39 +29,57 @@
 
 ModalDialog RID_DEFAULTABOUT
 {
-    HelpID = "cui:ModalDialog:RID_DEFAULTABOUT";
     OutputSize = TRUE ;
-    Size = MAP_APPFONT ( 245 , 260 ) ;
+    Size = MAP_APPFONT ( 245 , 280 ) ;
     Moveable = TRUE ;
     SVLook = TRUE ;
-    Text [ x-comment ] = "PB: ; PB: only %PRODUCTNAME";
-    Text [ en-US ] = "About %PRODUCTNAME" ;
+//    TEXT_DEFAULTABOUT
     OKButton ABOUT_BTN_OK
     {
         DefButton = TRUE ;
         Pos = MAP_APPFONT ( 174 , 6 ) ;
         Size = MAP_APPFONT ( 50 , 14 ) ;
     };
-    FixedText ABOUT_FTXT_VERSION
+    MultiLineEdit ABOUT_FTXT_VERSION
     {
+        Border = FALSE ;
         Pos = MAP_APPFONT ( 54 , 6 ) ;
         Size = MAP_APPFONT ( 118 , 16 ) ;
-        WordBreak = TRUE ;
-        Text = "%PRODUCTNAME %ABOUTBOXPRODUCTVERSION %PRODUCTEXTENSION" ;
+        IgnoreTab = TRUE ;
+        ReadOnly = TRUE ;
+        AutoVScroll = TRUE ;
     };
     MultiLineEdit ABOUT_FTXT_COPYRIGHT
     {
-        HelpID = "cui:MultiLineEdit:RID_DEFAULTABOUT:ABOUT_FTXT_COPYRIGHT";
-        Border = TRUE ;
+        Border = FALSE ;
         Pos = MAP_APPFONT ( 54 , 25 ) ;
-        Size = MAP_APPFONT ( 168 , 51 ) ;
+        Size = MAP_APPFONT ( 168 , 71 ) ;
         IgnoreTab = TRUE ;
         ReadOnly = TRUE ;
         AutoVScroll = TRUE ;
     };
+    FixedText ABOUT_FTXT_LINK
+    {
+        NoLabel = TRUE;
+        TabStop = TRUE;
+        Text [ en-US ] = "Contributor credits";
+        Pos = MAP_APPFONT ( 54 , 100 ) ;
+        Size = MAP_APPFONT ( 168 , 10 ) ;
+    };
+    String ABOUT_STR_VERSION
+    {
+        Text[ en-US ] = "%PRODUCTNAME %ABOUTBOXPRODUCTVERSION %PRODUCTEXTENSION";
+    };
+    String ABOUT_STR_COPYRIGHT
+    {
+        Text[ en-US ] = "Copyright © 2000, 2010 LibreOffice contributors and/or their affiliates. All rights reserved.\nThis product was created by %OOOVENDOR, based on OpenOffice.org, which is Copyright 2000, 2010 Oracle and/or its affiliates.\n%OOOVENDOR acknowledges all community members, please find more info at the link below:";
+    };
+    String ABOUT_STR_LINK
+    {
+        Text[ en-US ] = "http://www.libreoffice.org/credits.html";
+    };
     String ABOUT_STR_ACCEL
     {
         Text = "SDT" ;
     };
 };
-
diff --git a/cui/source/inc/about.hxx b/cui/source/inc/about.hxx
index 15256a5..86ead1d 100644
--- a/cui/source/inc/about.hxx
+++ b/cui/source/inc/about.hxx
@@ -1,7 +1,8 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /*************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- * 
+ *
  * Copyright 2000, 2010 Oracle and/or its affiliates.
  *
  * OpenOffice.org - a multi-platform office productivity suite
@@ -33,11 +34,12 @@
 #include <vcl/button.hxx>
 #include <vcl/accel.hxx>
 #include <svtools/svmedit.hxx>
-#include <tools/list.hxx>
 #include <svtools/stdctrl.hxx>
+#include "svtools/fixedhyper.hxx"
 #include <sfx2/basedlgs.hxx>		// SfxModalDialog
+#include <vector>
 
-DECLARE_LIST( AccelList, Accelerator* )
+typedef ::std::vector< Accelerator* > AccelList;
 
 // class AboutDialog -----------------------------------------------------
 
@@ -47,15 +49,16 @@ private:
     OKButton    	aOKButton;
     Image			aAppLogo;
 
-    FixedInfo   	aVersionText;
-    MultiLineEdit  	aCopyrightText;
-    FixedInfo   	aBuildData;
+    MultiLineEdit       aVersionText;
+    MultiLineEdit       aCopyrightText;
+    svt::FixedHyperlink aInfoLink;
 
-    ResStringArray*	pDeveloperAry;
-    String			aDevVersionStr;
+//    ResStringArray	aDeveloperAry; // RIP ...
     String 			aAccelStr;
     String			aVersionData;
+    String          aVersionTextStr;
     String          aCopyrightTextStr;
+    String          aLinkStr;
 
     AccelList 		aAccelList;
 
@@ -64,20 +67,20 @@ private:
     long            m_nDeltaWidth;
     int				m_nPendingScrolls;
 
-    sal_Bool            bNormal;
-
 protected:
-    virtual sal_Bool 	Close();
-    virtual void 	Paint( const Rectangle& );
+    virtual sal_Bool Close();
+    virtual void Paint( const Rectangle& rRect );
 
 public:
-    AboutDialog( Window* pParent, const ResId& nId );
+    AboutDialog( Window* pParent, const ResId& rId);
     ~AboutDialog();
 
     DECL_LINK( TimerHdl, Timer * );
     DECL_LINK( AccelSelectHdl, Accelerator * );
+    DECL_LINK( HandleHyperlink, svt::FixedHyperlink * );
 };
 
 #endif // #ifndef _ABOUT_HXX
 
 
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list