diff options
Diffstat (limited to 'cui/source/dialogs/about.cxx')
-rw-r--r-- | cui/source/dialogs/about.cxx | 280 |
1 files changed, 66 insertions, 214 deletions
diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx index d40e4525b2d1..0fcb96b31a5b 100644 --- a/cui/source/dialogs/about.cxx +++ b/cui/source/dialogs/about.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <vcl/layout.hxx> #include <vcl/svapp.hxx> #include <vcl/msgbox.hxx> @@ -41,7 +42,6 @@ #include <sfx2/sfxuno.hxx> #include <sfx2/sfxcommands.h> #include "about.hxx" -#include "about.hrc" #include <sfx2/sfxdefs.hxx> #include <sfx2/app.hxx> #include <rtl/ustrbuf.hxx> @@ -58,52 +58,42 @@ enum AboutDialogButton WEBSITE_BUTTON }; -AboutDialog::AboutDialog( Window* pParent, const ResId& rId) : - SfxModalDialog ( pParent, rId ), - aVersionText ( this, ResId( ABOUT_VERSION_TEXT, *rId.GetResMgr() ) ), - aDescriptionText ( this, ResId( ABOUT_DESCRIPTION_TEXT, *rId.GetResMgr() ) ), - aCopyrightText ( this, ResId( ABOUT_COPYRIGHT_TEXT, *rId.GetResMgr() ) ), - aLogoImage ( this ), - aLogoReplacement ( this, ResId( ABOUT_LOGO_REPLACEMENT, *rId.GetResMgr() ) ), - aCreditsButton ( this, ResId( ABOUT_BTN_CREDITS, *rId.GetResMgr() ) ), - aWebsiteButton ( this, ResId( ABOUT_BTN_WEBSITE, *rId.GetResMgr() ) ), - aCancelButton ( this, ResId( ABOUT_BTN_CANCEL, *rId.GetResMgr() ) ), - m_aVersionTextStr(ResId(ABOUT_STR_VERSION, *rId.GetResMgr()).toString().trim()), - m_aVendorTextStr(ResId(ABOUT_STR_VENDOR, *rId.GetResMgr())), - m_aCopyrightTextStr(ResId(ABOUT_STR_COPYRIGHT, *rId.GetResMgr())), - m_aBasedTextStr(ResId(ABOUT_STR_BASED, *rId.GetResMgr())), - m_aBasedDerivedTextStr(ResId(ABOUT_STR_BASED_DERIVED, *rId.GetResMgr())), - m_aCreditsLinkStr(ResId( ABOUT_STR_LINK_CREDITS, *rId.GetResMgr())), - m_sBuildStr(ResId(ABOUT_STR_BUILD, *rId.GetResMgr())), - m_aDescriptionTextStr(ResId(ABOUT_STR_DESCRIPTION, *rId.GetResMgr())) +AboutDialog::AboutDialog(Window* pParent) + : SfxModalDialog(pParent, "AboutDialog", "cui/ui/aboutdialog.ui") { - // Populate text items - aLogoReplacement.SetText ( utl::ConfigManager::getProductName() ); - - aVersionText.SetText( GetVersionString() ); - - aDescriptionText.SetText( m_aDescriptionTextStr ); - - rtl::OUString aCopyrightString = GetCopyrightString(); - aCopyrightText.SetText( aCopyrightString ); + get(m_pLogoReplacement, "logoreplacement"); + get(m_pLogoImage, "logo"); + get(m_pVersion, "version"); + get(m_pDescriptionText, "description"); + get(m_pCopyrightText, "copyright"); + m_aCopyrightTextStr = m_pCopyrightText->GetText(); + get(m_pWebsiteButton, "website"); + get(m_pCreditsButton, "credits"); + m_aCreditsLinkStr = get<FixedText>("link")->GetText(); + m_sBuildStr = get<FixedText>("buildid")->GetText(); + m_aVendorTextStr = get<FixedText>("vendor")->GetText(); + m_aVersionTextStr = m_pVersion->GetText(); + m_aBasedTextStr = get<FixedText>("libreoffice")->GetText(); + m_aBasedDerivedTextStr = get<FixedText>("derived")->GetText(); + + m_pVersion->SetText(GetVersionString()); + + OUString aCopyrightString = GetCopyrightString(); + m_pCopyrightText->SetText( aCopyrightString ); StyleControls(); - LayoutControls(); + + SetLogo(); // Allow the button to be identifiable once they are clicked - aCreditsButton.SetData( (void*)CREDITS_BUTTON ); - aWebsiteButton.SetData( (void*)WEBSITE_BUTTON ); + m_pCreditsButton->SetData( (void*)CREDITS_BUTTON ); + m_pWebsiteButton->SetData( (void*)WEBSITE_BUTTON ); // Connect all handlers - aCreditsButton.SetClickHdl( LINK( this, AboutDialog, HandleClick ) ); - aWebsiteButton.SetClickHdl( LINK( this, AboutDialog, HandleClick ) ); + m_pCreditsButton->SetClickHdl( LINK( this, AboutDialog, HandleClick ) ); + m_pWebsiteButton->SetClickHdl( LINK( this, AboutDialog, HandleClick ) ); - aCancelButton.SetClickHdl( LINK( this, AboutDialog, CancelHdl ) ); - - FreeResource(); - - // explicit Help-Id - SetHelpId( CMD_SID_ABOUT ); + get<PushButton>("close")->GrabFocus(); } IMPL_LINK( AboutDialog, HandleClick, PushButton*, pButton ) @@ -145,212 +135,80 @@ IMPL_LINK( AboutDialog, HandleClick, PushButton*, pButton ) void AboutDialog::StyleControls() { // Make all the controls have a transparent background - aLogoImage.SetBackground(); - aLogoReplacement.SetPaintTransparent( sal_True ); - aVersionText.SetPaintTransparent( sal_True ); - aDescriptionText.SetPaintTransparent( sal_True ); - aCopyrightText.SetPaintTransparent( sal_True ); + m_pLogoImage->SetBackground(); + m_pLogoReplacement->SetPaintTransparent(true); + m_pVersion->SetPaintTransparent(true); + m_pDescriptionText->SetPaintTransparent(true); + m_pCopyrightText->SetPaintTransparent(true); Font aLabelFont = GetSettings().GetStyleSettings().GetLabelFont(); Font aLargeFont = aLabelFont; aLargeFont.SetSize( Size( 0, aLabelFont.GetSize().Height() * 3 ) ); // Logo Replacement Text - aLogoReplacement.SetControlFont( aLargeFont ); - aLogoReplacement.SetTextSelectable( sal_False ); + m_pLogoReplacement->SetControlFont( aLargeFont ); // Description Text aLargeFont.SetSize( Size( 0, aLabelFont.GetSize().Height() * 1.3 ) ); - aDescriptionText.SetControlFont( aLargeFont ); - aDescriptionText.SetTextSelectable( sal_False ); + m_pDescriptionText->SetControlFont(aLargeFont); // Version Text aLargeFont.SetSize( Size( 0, aLabelFont.GetSize().Height() * 1.2 ) ); - aVersionText.SetControlFont( aLargeFont ); - aVersionText.EnableCursor( sal_False ); - - // Copyright Text - aCopyrightText.SetTextSelectable( sal_False ); + m_pVersion->SetControlFont(aLargeFont); // If not in high-contrast mode, hard-code colors if ( !(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) ) { - aLogoReplacement.SetControlForeground( Color( 51, 51, 51 ) ); - aVersionText.SetControlForeground( Color( 102, 102, 102 ) ); - aDescriptionText.SetControlForeground( Color( 51, 51, 51 ) ); - aCopyrightText.SetControlForeground( Color( 102, 102, 102 ) ); + m_pLogoReplacement->SetControlForeground(Color(51, 51, 51)); + m_pVersion->SetControlForeground(Color(102, 102, 102)); + m_pDescriptionText->SetControlForeground(Color(51, 51, 51)); + m_pCopyrightText->SetControlForeground(Color(102, 102, 102)); } - - - aCancelButton.GrabFocus(); } -void AboutDialog::LayoutControls() +void AboutDialog::SetLogo() { - // Get the size of the screen - Rectangle aScreenRect = Application::GetScreenPosSizePixel( (unsigned int)0 ); - // Obtain an appropriate text width from the size of the screen - sal_Int32 aIdealTextWidth = aScreenRect.GetWidth() / 2.4; - - sal_Int32 aDialogBorder = 12; - Size aDialogSize ( aIdealTextWidth + aDialogBorder * 2, 0 ); - - // Preliminarily layout buttons, so we see if we need a wider window - Size aButtonSize; - Point aButtonPos; - sal_Int32 aButtonsWidth = 0; - LayoutButtons( aDialogSize.Width(), aDialogBorder, aButtonPos, aButtonSize, - aButtonsWidth ); - - if (aButtonsWidth > 0) - aDialogSize.Width() += aButtonsWidth; - - // Render and Position Logo - Size aLogoSize( aIdealTextWidth, aIdealTextWidth / 20 ); - Point aLogoPos( 0, 0 ); + long nWidth = get_content_area()->get_preferred_size().Width(); // load svg logo, specify desired width, scale height isotrophically - if( SfxApplication::loadBrandSvg("flat_logo", - aLogoBitmap, - aDialogSize.Width()) && + if( SfxApplication::loadBrandSvg("flat_logo", aLogoBitmap, nWidth) && !aLogoBitmap.IsEmpty() ) { - aLogoSize = aLogoBitmap.GetSizePixel(); - - aLogoImage.SetImage( Image( aLogoBitmap ) ); - aLogoImage.SetPosSizePixel( aLogoPos, aLogoSize ); - aLogoImage.Show(); + m_pLogoImage->SetImage(Image(aLogoBitmap)); + m_pLogoReplacement->Hide(); + m_pLogoImage->Show(); } else { - aLogoPos.X() = aDialogBorder; - aLogoPos.Y() = aDialogBorder; - aLogoSize = aLogoReplacement.CalcMinimumSize(); - aLogoSize.Width() = aIdealTextWidth; - aLogoReplacement.SetPosSizePixel( aLogoPos, aLogoSize ); + m_pLogoImage->Hide(); + m_pLogoReplacement->Show(); } - - // Position version text - sal_Int32 aLogoVersionSpacing = aLogoSize.Height() * 0.15; - Point aVersionPos( aDialogBorder, - aLogoPos.Y() + aLogoSize.Height() + aLogoVersionSpacing ); - Size aVersionSize = aVersionText.GetSizePixel(); - aVersionSize.Width() = aIdealTextWidth; - aVersionText.SetPosSizePixel( aVersionPos, aVersionSize ); - aVersionSize = aVersionText.CalcMinimumSize(); - aVersionText.SetSizePixel( aVersionSize ); - - // Position description text - sal_Int32 aVersionDescriptionSpacing = aLogoSize.Height() * 0.45; - Point aDescriptionPos( aDialogBorder, aVersionPos.Y() + aVersionSize.Height() + aVersionDescriptionSpacing ); - Size aDescriptionSize = aDescriptionText.GetSizePixel(); - aDescriptionSize.Width() = aIdealTextWidth; - aDescriptionText.SetPosSizePixel( aDescriptionPos, aDescriptionSize ); - aDescriptionSize = aDescriptionText.CalcMinimumSize(); - aDescriptionText.SetSizePixel( aDescriptionSize ); - - // Layout copyright text - Point aCopyrightPos( aDialogBorder, aDescriptionPos.Y() + aDescriptionText.GetSizePixel().Height() + aVersionDescriptionSpacing ); - Size aCopyrightSize = aCopyrightText.GetSizePixel(); - aCopyrightSize.Width() = aIdealTextWidth; - aCopyrightText.SetPosSizePixel( aCopyrightPos, aCopyrightSize ); - aCopyrightSize = aCopyrightText.CalcMinimumSize(); - aCopyrightSize.Width() = aIdealTextWidth; - aCopyrightText.SetSizePixel( aCopyrightSize ); - - // Move buttons into final place - sal_Int32 aButtonPosY = aDialogBorder + aCopyrightPos.Y() + - aCopyrightText.GetSizePixel().Height() + aVersionDescriptionSpacing; - - MoveControl(aCreditsButton, 0, aButtonPosY); - MoveControl(aWebsiteButton, 0, aButtonPosY); - MoveControl(aCancelButton, 0, aButtonPosY); - - // The centers everything again, if aDialogSize.Width() has become wider - // before; the -20 "fixes" a weird text centering bug - MoveControl(aVersionText, (aDialogSize.Width() - aVersionText.GetSizePixel().Width() - 20)/2, 0); - MoveControl(aDescriptionText, (aDialogSize.Width() - aDescriptionText.GetSizePixel().Width() - 20)/2, 0); - MoveControl(aCopyrightText, (aDialogSize.Width() - aCopyrightText.GetSizePixel().Width() - 20)/2, 0); - - aDialogSize.Height() = aButtonPosY + aButtonSize.Height() + aDialogBorder; - - - // Layout background image - if ( !(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) ) - SfxApplication::loadBrandSvg("shell/about", - aBackgroundBitmap, - aDialogSize.Width()); - SetOutputSizePixel( aDialogSize ); - } -void AboutDialog::LayoutButtons(sal_Int32 aDialogWidth, sal_Int32 aDialogBorder, - Point& aButtonPos, Size& aButtonSize, - sal_Int32& aButtonsWidth ) +void AboutDialog::Resize() { - // Position credits button - sal_Int32 aButtonVPadding = 5; - sal_Int32 aButtonHPadding = 4; - sal_Int32 aAdjacentButtonSpacing = 15; - sal_Int32 aCreditsButtonWidth = aCreditsButton.CalcMinimumSize().Width(); - sal_Int32 aWebsiteButtonWidth = aWebsiteButton.CalcMinimumSize().Width(); - sal_Int32 aCancelButtonWidth = aCancelButton.CalcMinimumSize().Width(); - sal_Int32 aLargestButtonWidth = 70; - - if ( aLargestButtonWidth < aCreditsButtonWidth ) - aLargestButtonWidth = aCreditsButtonWidth; - if ( aLargestButtonWidth < aWebsiteButtonWidth ) - aLargestButtonWidth = aWebsiteButtonWidth; - if ( aLargestButtonWidth < aCancelButtonWidth ) - aLargestButtonWidth = aCancelButtonWidth; - - aButtonSize.Width() = aLargestButtonWidth + ( 2 * aButtonHPadding ); - aButtonSize.Height() = aWebsiteButton.CalcMinimumSize().Height() + ( 2 * aButtonVPadding ); - - aCreditsButton.SetSizePixel( aButtonSize ); - aWebsiteButton.SetSizePixel( aButtonSize ); - aCancelButton.SetSizePixel( aButtonSize ); - - sal_Int32 aButtonSpacing = aDialogWidth - ( aDialogBorder * 2 ) - ( aButtonSize.Width() * 3 ) - aAdjacentButtonSpacing ; - if (aButtonSpacing < aAdjacentButtonSpacing) + SfxModalDialog::Resize(); + // Load background image + if (isInitialLayout(this) && !(Application::GetSettings().GetStyleSettings().GetHighContrastMode())) { - aButtonsWidth = aAdjacentButtonSpacing - aButtonSpacing; - aButtonSpacing = aAdjacentButtonSpacing; + SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, GetOutputSizePixel().Width()); } - - aButtonPos.X() = aDialogBorder; - aButtonPos.Y() = 0; - - aCreditsButton.SetPosPixel( aButtonPos ); - - aButtonPos.X() += aButtonSize.Width() + aAdjacentButtonSpacing; - aWebsiteButton.SetPosPixel( aButtonPos ); - - aButtonPos.X() += aButtonSize.Width() + aButtonSpacing; - aCancelButton.SetPosPixel( aButtonPos ); - - -} - -void AboutDialog::MoveControl(Control& rControl, sal_Int32 X, sal_Int32 Y) -{ - Point aControlPos = rControl.GetPosPixel(); - aControlPos.X() += X; - aControlPos.Y() += Y; - rControl.SetPosPixel(aControlPos); } void AboutDialog::Paint( const Rectangle& rRect ) { SetClipRegion(Region(rRect)); - Point aPos ( rRect.GetWidth() - aBackgroundBitmap.GetSizePixel().Width(), rRect.GetHeight() - aBackgroundBitmap.GetSizePixel().Height() ); - DrawBitmapEx( aPos, aBackgroundBitmap ); + + Size aSize(GetOutputSizePixel()); + Point aPos(aSize.Width() - aBackgroundBitmap.GetSizePixel().Width(), + aSize.Height() - aBackgroundBitmap.GetSizePixel().Height()); + DrawBitmapEx(aPos, aBackgroundBitmap); } -rtl::OUString AboutDialog::GetBuildId() +OUString AboutDialog::GetBuildId() { - rtl::OUString sDefault; - rtl::OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); + OUString sDefault; + OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); if (!sBuildId.isEmpty()) return sBuildId; @@ -366,15 +224,15 @@ rtl::OUString AboutDialog::GetBuildId() return sBuildId; } -rtl::OUString AboutDialog::GetVersionString() +OUString AboutDialog::GetVersionString() { - rtl::OUString sVersion = m_aVersionTextStr; + OUString sVersion = m_aVersionTextStr; - rtl::OUString sBuildId = GetBuildId(); + OUString sBuildId = GetBuildId(); if (!sBuildId.trim().isEmpty()) { - sVersion += " "; + sVersion += "\n"; if (m_sBuildStr.indexOf("$BUILDID") == -1) { SAL_WARN( "cui.dialogs", "translated Build Id string in translations doesn't contain $BUILDID placeholder" ); @@ -407,12 +265,6 @@ rtl::OUString AboutDialog::GetCopyrightString() return aCopyrightString; } -IMPL_LINK_NOARG(AboutDialog, CancelHdl) -{ - Close(); - return 0; -} - sal_Bool AboutDialog::Close() { EndDialog( RET_OK ); |