diff options
Diffstat (limited to 'cui/source/dialogs/about.cxx')
-rw-r--r-- | cui/source/dialogs/about.cxx | 446 |
1 files changed, 175 insertions, 271 deletions
diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx index 625adf9f9a7c..ec5d6b98930b 100644 --- a/cui/source/dialogs/about.cxx +++ b/cui/source/dialogs/about.cxx @@ -17,324 +17,228 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <config_feature_opencl.h> -#include <osl/process.h> -#include <sal/log.hxx> -#include <osl/diagnose.h> -#include <rtl/character.hxx> -#include <vcl/graphicfilter.hxx> -#include <vcl/settings.hxx> -#include <vcl/stdtext.hxx> -#include <vcl/svapp.hxx> +#include <about.hxx> + +#include <osl/diagnose.h> //OSL_ENSURE +#include <osl/process.h> //osl_getProcessLocale +#include <rtl/character.hxx> //rtl::isAsciiHexDigit +#include <sal/log.hxx> //SAL_WARN +#include <vcl/settings.hxx> //GetSettings #include <vcl/weld.hxx> +#include <vcl/svapp.hxx> //Application:: +#include <vcl/virdev.hxx> //VirtualDevice -#include <unotools/configmgr.hxx> -#include <unotools/bootstrap.hxx> -#include <com/sun/star/uno/Any.h> -#include <svtools/langhelp.hxx> #include <i18nlangtag/languagetag.hxx> - -#include <com/sun/star/system/SystemShellExecuteFlags.hpp> -#include <com/sun/star/system/SystemShellExecute.hpp> -#include <comphelper/processfactory.hxx> -#include <comphelper/anytostring.hxx> -#include <cppuhelper/exc_hlp.hxx> -#include <svtools/optionsdrawinglayer.hxx> - -#include <about.hxx> -#include <dialmgr.hxx> +#include <svtools/langhelp.hxx> +#include <unotools/bootstrap.hxx> //utl::Bootstrap::getBuildVersion +#include <unotools/configmgr.hxx> //ConfigManager:: +#include <config_buildid.h> //EXTRA_BUILDID +#include <dialmgr.hxx> //CuiResId +#include <sfx2/app.hxx> //SfxApplication::loadBrandSvg #include <strings.hrc> -#include <config_buildid.h> -#include <sfx2/app.hxx> +#include <config_feature_opencl.h> #if HAVE_FEATURE_OPENCL #include <opencl/openclwrapper.hxx> #endif -#include <officecfg/Office/Common.hxx> #include <officecfg/Office/Calc.hxx> +#include <officecfg/Office/Common.hxx> using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star; - -AboutDialog::AboutDialog(weld::Window* pParent) - : m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/aboutdialog.ui")) - , m_xDialog(m_xBuilder->weld_about_dialog("AboutDialog")) - , m_xContentArea(m_xDialog->weld_content_area()) -{ - m_xDialog->add_button(GetStandardText(StandardButtonType::Close), RET_CLOSE); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_CREDITS), 101); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_WEBSITE), 102); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_RELEASE_NOTES), 103); - - m_xCreditsButton.reset(m_xDialog->weld_widget_for_response(101)); - m_xCreditsButton->set_secondary(true); - m_xWebsiteButton.reset(m_xDialog->weld_widget_for_response(102)); - m_xWebsiteButton->set_secondary(true); - m_xReleaseNotesButton.reset(m_xDialog->weld_widget_for_response(103)); - m_xReleaseNotesButton->set_secondary(true); - m_xCloseButton.reset(m_xDialog->weld_widget_for_response(RET_CLOSE)); - - m_buildIdLinkString = m_xDialog->get_website_label(); - - m_xDialog->set_version(GetVersionString()); - m_xDialog->set_copyright(GetCopyrightString()); - - SetBuildIdLink(); - - SetLogo(); - - m_xDialog->connect_size_allocate(LINK(this, AboutDialog, SizeAllocHdl)); - - // Connect all handlers - m_xCreditsButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xWebsiteButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xReleaseNotesButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xCloseButton->grab_focus(); -} -AboutDialog::~AboutDialog() -{ +AboutDialog::AboutDialog(weld::Window *pParent) + : GenericDialogController(pParent, "cui/ui/aboutdialog.ui", "AboutDialog"), + m_pCreditsButton(m_xBuilder->weld_link_button("btnCredits")), + m_pWebsiteButton(m_xBuilder->weld_link_button("btnWebsite")), + m_pReleaseNotesButton(m_xBuilder->weld_link_button("btnReleaseNotes")), + m_pCloseButton(m_xBuilder->weld_button("btnClose")), + m_pBrandImage(m_xBuilder->weld_image("imBrand")), + m_pAboutImage(m_xBuilder->weld_image("imAbout")), + m_pVersionLabel(m_xBuilder->weld_label("lbVersion")), + m_pCopyrightLabel(m_xBuilder->weld_label("lbCopyright")) { + m_pVersionLabel->set_label(GetVersionString()); + m_pCopyrightLabel->set_label(GetCopyrightString()); + + //Images + const Size nWidth(m_pVersionLabel->get_preferred_size()); + BitmapEx aBackgroundBitmap; + + if (SfxApplication::loadBrandSvg(Application::GetSettings() + .GetStyleSettings() + .GetDialogColor() + .IsDark() + ? "shell/logo_inverted" + : "shell/logo", + aBackgroundBitmap, + nWidth.getWidth() * 0.8)) { + ScopedVclPtr<VirtualDevice> m_pVirDev = + m_pBrandImage->create_virtual_device(); + m_pVirDev->SetOutputSizePixel(aBackgroundBitmap.GetSizePixel()); + m_pVirDev->DrawBitmapEx(Point(0, 0), aBackgroundBitmap); + m_pBrandImage->set_image(m_pVirDev.get()); + m_pVirDev.disposeAndClear(); + } + if (SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, + nWidth.getWidth())) { + ScopedVclPtr<VirtualDevice> m_pVirDev = + m_pAboutImage->create_virtual_device(); + m_pVirDev->SetOutputSizePixel(aBackgroundBitmap.GetSizePixel()); + m_pVirDev->DrawBitmapEx(Point(0, 0), aBackgroundBitmap); + m_pAboutImage->set_image(m_pVirDev.get()); + m_pVirDev.disposeAndClear(); + } + + //Links + m_pCreditsButton->set_uri(CuiResId(RID_SVXSTR_ABOUT_CREDITS_URL)); + + OUString sURL(officecfg::Office::Common::Help::StartCenter::InfoURL::get()); + localizeWebserviceURI(sURL); + m_pWebsiteButton->set_uri(sURL); + + sURL = officecfg::Office::Common::Menus::ReleaseNotesURL::get() + + "?LOvers=" + utl::ConfigManager::getProductVersion() + "&LOlocale=" + + LanguageTag(utl::ConfigManager::getUILocale()).getLanguage(); + m_pReleaseNotesButton->set_uri(sURL); + + //Handler + m_pCloseButton->grab_focus(); } -IMPL_LINK(AboutDialog, HandleClick, weld::Button&, rButton, void) -{ - OUString sURL = ""; - - // Find which button was pressed and from this, get the URL to be opened - if (&rButton == m_xCreditsButton.get()) - sURL = CuiResId(RID_SVXSTR_ABOUT_CREDITS_URL); - else if (&rButton == m_xWebsiteButton.get()) - { - sURL = officecfg::Office::Common::Help::StartCenter::InfoURL::get(); - localizeWebserviceURI(sURL); - } - else if (&rButton == m_xReleaseNotesButton.get()) - { - sURL = officecfg::Office::Common::Menus::ReleaseNotesURL::get() + - "?LOvers=" + utl::ConfigManager::getProductVersion() + - "&LOlocale=" + LanguageTag(utl::ConfigManager::getUILocale()).getLanguage(); - } +AboutDialog::~AboutDialog() {} - // If the URL is empty, don't do anything - if ( sURL.isEmpty() ) - return; - try - { - Reference< css::system::XSystemShellExecute > xSystemShellExecute( - css::system::SystemShellExecute::create(::comphelper::getProcessComponentContext() ) ); - xSystemShellExecute->execute( sURL, OUString(), css::system::SystemShellExecuteFlags::URIS_ONLY ); - } - catch (const Exception&) - { - Any exc( ::cppu::getCaughtException() ); - OUString msg( ::comphelper::anyToString( exc ) ); - const SolarMutexGuard guard; - std::unique_ptr<weld::MessageDialog> xErrorBox(Application::CreateMessageDialog(getDialog(), - VclMessageType::Warning, VclButtonsType::Ok, msg)); - xErrorBox->set_title(m_xDialog->get_title()); - xErrorBox->run(); - } -} +OUString AboutDialog::GetBuildId() { + OUString sDefault; + OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); + if (!sBuildId.isEmpty()) + return sBuildId; -void AboutDialog::SetBuildIdLink() -{ - const OUString buildId = GetBuildId(); + sBuildId = utl::Bootstrap::getBuildIdData(sDefault); - if (IsStringValidGitHash(buildId)) - { - if (m_buildIdLinkString.indexOf("$GITHASH") == -1) - { - SAL_WARN( "cui.dialogs", "translated git hash string in translations doesn't contain $GITHASH placeholder" ); - m_buildIdLinkString += " $GITHASH"; - } + if (!sBuildId.isEmpty()) { + return sBuildId.getToken(0, '-'); + } - m_xDialog->set_website_label(m_buildIdLinkString.replaceAll("$GITHASH", buildId)); - m_xDialog->set_website("https://hub.libreoffice.org/git-core/" + buildId); - } - else - { - m_xDialog->set_website_label(OUString()); - m_xDialog->set_website(OUString()); - } + OSL_ENSURE(!sBuildId.isEmpty(), "No BUILDID in bootstrap file"); + return sBuildId; } -void AboutDialog::SetLogo() -{ - auto nWidth = m_xContentArea->get_preferred_size().Width(); +OUString AboutDialog::GetLocaleString() { + OUString aLocaleStr; + rtl_Locale *pLocale; - // fdo#67401 set AntiAliasing for SVG logo - SvtOptionsDrawinglayer aDrawOpt; - bool bOldAntiAliasSetting = aDrawOpt.IsAntiAliasing(); - aDrawOpt.SetAntiAliasing(true); + osl_getProcessLocale(&pLocale); - // load svg logo, specify desired width, scale height isotropically - SfxApplication::loadBrandSvg("flat_logo", aLogoBitmap, nWidth); - - aDrawOpt.SetAntiAliasing(bOldAntiAliasSetting); - - if (!aLogoBitmap) - m_xDialog->set_logo(nullptr); + if (pLocale && pLocale->Language) { + if (pLocale->Country && rtl_uString_getLength(pLocale->Country) > 0) + aLocaleStr = OUString::unacquired(&pLocale->Language) + "_" + + OUString::unacquired(&pLocale->Country); else - { - Graphic aGraphic(aLogoBitmap); - m_xDialog->set_logo(aGraphic.GetXGraphic()); - } -} - -IMPL_LINK(AboutDialog, SizeAllocHdl, const Size&, rSize, void) -{ - if (rSize.Width() == aBackgroundBitmap.GetSizePixel().Width()) - return; - // Load background image - if (!(Application::GetSettings().GetStyleSettings().GetHighContrastMode())) - { - SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, rSize.Width()); - Graphic aGraphic(aBackgroundBitmap); - m_xDialog->set_background(aGraphic.GetXGraphic()); - } -} - -OUString AboutDialog::GetBuildId() -{ - OUString sDefault; - OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); - if (!sBuildId.isEmpty()) - return sBuildId; - - sBuildId = utl::Bootstrap::getBuildIdData(sDefault); - - if (!sBuildId.isEmpty()) - { - return sBuildId.getToken( 0, '-' ); - } - - OSL_ENSURE( !sBuildId.isEmpty(), "No BUILDID in bootstrap file" ); - return sBuildId; -} - -OUString AboutDialog::GetLocaleString() -{ - OUString aLocaleStr; - rtl_Locale * pLocale; - - osl_getProcessLocale( &pLocale ); - - if ( pLocale && pLocale->Language ) - { - if (pLocale->Country && rtl_uString_getLength( pLocale->Country) > 0) - aLocaleStr = OUString::unacquired(&pLocale->Language) + "_" + OUString::unacquired(&pLocale->Country); - else - aLocaleStr = OUString(pLocale->Language); - if (pLocale->Variant && rtl_uString_getLength( pLocale->Variant) > 0) - aLocaleStr += OUString(pLocale->Variant); - } + aLocaleStr = OUString(pLocale->Language); + if (pLocale->Variant && rtl_uString_getLength(pLocale->Variant) > 0) + aLocaleStr += OUString(pLocale->Variant); + } - return aLocaleStr; + return aLocaleStr; } -bool AboutDialog::IsStringValidGitHash(const OUString& hash) -{ - for (int i = 0; i < hash.getLength(); i++) - { - if (!rtl::isAsciiHexDigit(hash[i])) - { - return false; - } +bool AboutDialog::IsStringValidGitHash(const OUString &hash) { + for (int i = 0; i < hash.getLength(); i++) { + if (!rtl::isAsciiHexDigit(hash[i])) { + return false; } + } - return true; + return true; } -OUString AboutDialog::GetVersionString() -{ - OUString sVersion = CuiResId(RID_SVXSTR_ABOUT_VERSION); +OUString AboutDialog::GetVersionString() { + OUString sVersion = CuiResId(RID_SVXSTR_ABOUT_VERSION); #ifdef _WIN64 - sVersion += " (x64)"; + sVersion += " (x64)"; #elif defined(_WIN32) - sVersion += " (x86)"; + sVersion += " (x86)"; #endif - OUString sBuildId = GetBuildId(); - - OUString aLocaleStr = Application::GetSettings().GetLanguageTag().getBcp47() + " (" + GetLocaleString() + ")"; - OUString aUILocaleStr = Application::GetSettings().GetUILanguageTag().getBcp47(); - - if (!sBuildId.trim().isEmpty()) - { - sVersion += "\n"; - OUString sBuildStr = CuiResId(RID_SVXSTR_ABOUT_BUILDID); - if (sBuildStr.indexOf("$BUILDID") == -1) - { - SAL_WARN( "cui.dialogs", "translated Build Id string in translations doesn't contain $BUILDID placeholder" ); - sBuildStr += " $BUILDID"; - } - sVersion += sBuildStr.replaceAll("$BUILDID", sBuildId); - } - - sVersion += "\n" + Application::GetHWOSConfInfo(); - - bool const extra = EXTRA_BUILDID[0] != '\0'; - // extracted from the 'if' to avoid Clang -Wunreachable-code - if (extra) - { - sVersion += "\n" EXTRA_BUILDID; - } - - OUString sLocaleStr(CuiResId(RID_SVXSTR_ABOUT_LOCALE)); - if (sLocaleStr.indexOf("$LOCALE") == -1) - { - SAL_WARN( "cui.dialogs", "translated locale string in translations doesn't contain $LOCALE placeholder" ); - sLocaleStr += " $LOCALE"; - } - sVersion += "\n" + sLocaleStr.replaceAll("$LOCALE", aLocaleStr); - - OUString sUILocaleStr(CuiResId(RID_SVXSTR_ABOUT_UILOCALE)); - if (sUILocaleStr.indexOf("$LOCALE") == -1) - { - SAL_WARN( "cui.dialogs", "translated uilocale string in translations doesn't contain $LOCALE placeholder" ); - sUILocaleStr += " $LOCALE"; - } - sVersion += "; " + sUILocaleStr.replaceAll("$LOCALE", aUILocaleStr); - - OUString aCalcMode = "Calc: "; // Calc calculation mode + OUString sBuildId = GetBuildId(); + + OUString aLocaleStr = Application::GetSettings().GetLanguageTag().getBcp47() + + " (" + GetLocaleString() + ")"; + OUString aUILocaleStr = + Application::GetSettings().GetUILanguageTag().getBcp47(); + + if (!sBuildId.trim().isEmpty()) { + sVersion += "\n"; + OUString sBuildStr = CuiResId(RID_SVXSTR_ABOUT_BUILDID); + if (sBuildStr.indexOf("$BUILDID") == -1) { + SAL_WARN("cui.dialogs", "translated Build Id string in translations " + "doesn't contain $BUILDID placeholder"); + sBuildStr += " $BUILDID"; + } + sVersion += sBuildStr.replaceAll("$BUILDID", sBuildId); + } + + sVersion += "\n" + Application::GetHWOSConfInfo(); + + bool const extra = EXTRA_BUILDID[0] != '\0'; + // extracted from the 'if' to avoid Clang -Wunreachable-code + if (extra) { + sVersion += "\n" EXTRA_BUILDID; + } + + OUString sLocaleStr(CuiResId(RID_SVXSTR_ABOUT_LOCALE)); + if (sLocaleStr.indexOf("$LOCALE") == -1) { + SAL_WARN("cui.dialogs", "translated locale string in translations doesn't " + "contain $LOCALE placeholder"); + sLocaleStr += " $LOCALE"; + } + sVersion += "\n" + sLocaleStr.replaceAll("$LOCALE", aLocaleStr); + + OUString sUILocaleStr(CuiResId(RID_SVXSTR_ABOUT_UILOCALE)); + if (sUILocaleStr.indexOf("$LOCALE") == -1) { + SAL_WARN("cui.dialogs", "translated uilocale string in translations " + "doesn't contain $LOCALE placeholder"); + sUILocaleStr += " $LOCALE"; + } + sVersion += "; " + sUILocaleStr.replaceAll("$LOCALE", aUILocaleStr); + + OUString aCalcMode = "Calc: "; // Calc calculation mode #if HAVE_FEATURE_OPENCL - bool bOpenCL = openclwrapper::GPUEnv::isOpenCLEnabled(); - if (bOpenCL) - aCalcMode += "CL"; + bool bOpenCL = openclwrapper::GPUEnv::isOpenCLEnabled(); + if (bOpenCL) + aCalcMode += "CL"; #else - const bool bOpenCL = false; + const bool bOpenCL = false; #endif - static const bool bThreadingProhibited = std::getenv("SC_NO_THREADED_CALCULATION"); - bool bThreadedCalc = officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::get(); + static const bool bThreadingProhibited = + std::getenv("SC_NO_THREADED_CALCULATION"); + bool bThreadedCalc = officecfg::Office::Calc::Formula::Calculation:: + UseThreadedCalculationForFormulaGroups::get(); - if (!bThreadingProhibited && !bOpenCL && bThreadedCalc) - { - if (!aCalcMode.endsWith(" ")) - aCalcMode += " "; - aCalcMode += "threaded"; - } + if (!bThreadingProhibited && !bOpenCL && bThreadedCalc) { + if (!aCalcMode.endsWith(" ")) + aCalcMode += " "; + aCalcMode += "threaded"; + } - sVersion += "\n" + aCalcMode; + sVersion += "\n" + aCalcMode; - return sVersion; + return sVersion; } -OUString AboutDialog::GetCopyrightString() -{ - OUString sVendorTextStr(CuiResId(RID_SVXSTR_ABOUT_VENDOR)); - OUString aCopyrightString = sVendorTextStr + "\n" - + CuiResId(RID_SVXSTR_ABOUT_COPYRIGHT) + "\n"; +OUString AboutDialog::GetCopyrightString() { + OUString sVendorTextStr(CuiResId(RID_SVXSTR_ABOUT_VENDOR)); + OUString aCopyrightString = + sVendorTextStr + "\n" + CuiResId(RID_SVXSTR_ABOUT_COPYRIGHT) + "\n"; - if (utl::ConfigManager::getProductName() == "LibreOffice") - aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_BASED_ON); - else - aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_DERIVED); + if (utl::ConfigManager::getProductName() == "LibreOffice") + aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_BASED_ON); + else + aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_DERIVED); - return aCopyrightString; + return aCopyrightString; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |