From: Vadim Zeitlin Date: Sun, 8 Oct 2006 12:07:03 +0000 (+0000) Subject: added native Mac implementation of wxAboutBox(); also moved aboutdlg.* files from... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/fd3f8f5cf55bf0e71583417d4323bbc79b286070 added native Mac implementation of wxAboutBox(); also moved aboutdlg.* files from core to adv library as they depend on wxHyperlinkCtrl which is in adv git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41695 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 381f449e1d..354b40d7f9 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -634,7 +634,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/valtext.cpp src/common/wincmn.cpp src/common/xpmdecod.cpp - src/generic/aboutdlgg.cpp src/generic/busyinfo.cpp src/generic/buttonbar.cpp src/generic/choicdgg.cpp @@ -666,7 +665,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/generic/vscroll.cpp - wx/aboutdlg.h wx/bmpbuttn.h wx/brush.h wx/button.h @@ -694,7 +692,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/gauge.h wx/gbsizer.h wx/gdicmn.h - wx/generic/aboutdlgg.h wx/generic/accel.h wx/generic/buttonbar.h wx/generic/choicdgg.h @@ -1511,7 +1508,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/generic/statusbr.cpp src/generic/prntdlgg.cpp - src/msw/aboutdlg.cpp src/msw/accel.cpp src/msw/bmpbuttn.cpp src/msw/button.cpp @@ -2615,6 +2611,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/datavcmn.cpp + src/generic/aboutdlgg.cpp src/generic/bmpcboxg.cpp src/generic/calctrl.cpp src/generic/datavgen.cpp @@ -2639,6 +2636,8 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/dataview.h wx/dateevt.h wx/dcbuffer.h + wx/aboutdlg.h + wx/generic/aboutdlgg.h wx/generic/bmpcbox.h wx/generic/calctrl.h wx/generic/datectrl.h @@ -2674,6 +2673,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/taskbarcmn.cpp + src/msw/aboutdlg.cpp src/msw/sound.cpp src/msw/taskbar.cpp @@ -2700,6 +2700,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/taskbarcmn.cpp + src/mac/carbon/aboutdlg.cpp src/mac/carbon/drawer.cpp src/mac/carbon/sound.cpp src/mac/carbon/taskbar.cpp diff --git a/include/wx/aboutdlg.h b/include/wx/aboutdlg.h index 2f7419e42b..a0342ccde7 100644 --- a/include/wx/aboutdlg.h +++ b/include/wx/aboutdlg.h @@ -114,6 +114,20 @@ public: bool HasTranslators() const { return !m_translators.empty(); } const wxArrayString& GetTranslators() const { return m_translators; } + + // implementation only + // ------------------- + + // "simple" about dialog shows only textual information (with possibly + // default icon but without hyperlink nor any long texts such as the + // licence text) + bool IsSimple() const + { return !HasWebSite() && !HasIcon() && !HasLicence(); } + + // get the description and credits (i.e. all of developers, doc writers, + // artists and translators) as a one long multiline string + wxString GetDescriptionAndCredits() const; + private: wxString m_name, m_version, diff --git a/src/generic/aboutdlgg.cpp b/src/generic/aboutdlgg.cpp index 2bd702fe67..4616aac0e5 100644 --- a/src/generic/aboutdlgg.cpp +++ b/src/generic/aboutdlgg.cpp @@ -38,9 +38,52 @@ #include "wx/hyperlink.h" // ============================================================================ -// wxAboutDialog implementation +// implementation // ============================================================================ +// ---------------------------------------------------------------------------- +// wxAboutDialogInfo +// ---------------------------------------------------------------------------- + +// helper function: returns all array elements in a single comma-separated and +// newline-terminated string +static wxString AllAsString(const wxArrayString& a) +{ + wxString s; + const size_t count = a.size(); + for ( size_t n = 0; n < count; n++ ) + { + s << a[n] << (n == count - 1 ? _T("\n") : _T(", ")); + } + + return s; +} + +wxString wxAboutDialogInfo::GetDescriptionAndCredits() const +{ + wxString s = GetDescription(); + if ( !s.empty() ) + s << _T('\n'); + + if ( HasDevelopers() ) + s << _T('\n') << _("Developed by ") << AllAsString(GetDevelopers()); + + if ( HasDocWriters() ) + s << _T('\n') << ("Documentation by ") << AllAsString(GetDocWriters()); + + if ( HasArtists() ) + s << _T('\n') << ("Graphics art by ") << AllAsString(GetArtists()); + + if ( HasTranslators() ) + s << _T('\n') << ("Translations by ") << AllAsString(GetTranslators()); + + return s; +} + +// ---------------------------------------------------------------------------- +// wxAboutDialog +// ---------------------------------------------------------------------------- + bool wxAboutDialog::Create(const wxAboutDialogInfo& info) { // TODO: should we use main frame as parent by default here? @@ -131,10 +174,9 @@ void wxGenericAboutBox(const wxAboutDialogInfo& info) dlg.ShowModal(); } -// currently wxAboutBox is implemented natively only under wxMSW, so we provide -// it here for the other platforms (this is going to change when GTK+ and Mac -// native versions are implemented) -#ifndef __WXMSW__ +// currently wxAboutBox is implemented natively only under these platforms, for +// the others we provide a generic fallback here +#if !defined(__WXMSW__) && !defined(__WXMAC__) void wxAboutBox(const wxAboutDialogInfo& info) { diff --git a/src/mac/carbon/aboutdlg.cpp b/src/mac/carbon/aboutdlg.cpp new file mode 100644 index 0000000000..9cf251339a --- /dev/null +++ b/src/mac/carbon/aboutdlg.cpp @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: mac/carbon/aboutdlg.cpp +// Purpose: native wxAboutBox() implementation for wxMac +// Author: Vadim Zeitlin +// Created: 2006-10-08 +// RCS-ID: $Id$ +// Copyright: (c) 2006 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#if wxUSE_ABOUTDLG + +#ifndef WX_PRECOMP +#endif //WX_PRECOMP + +#include "wx/aboutdlg.h" +#include "wx/generic/aboutdlgg.h" + +#include "wx/mac/private.h" + +// helper class for HIAboutBox options +class AboutBoxOptions : public wxMacCFRefHolder +{ +public: + AboutBoxOptions() : wxMacCFRefHolder + ( + CFDictionaryCreateMutable + ( + kCFAllocatorDefault, + 4, // there are at most 4 values + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks + ) + ) + { + } + + void Set(CFStringRef key, const wxString& value) + { + CFDictionarySetValue(*this, key, wxMacCFStringHolder(value)); + } +}; + +// ============================================================================ +// implementation +// ============================================================================ + +void wxAboutBox(const wxAboutDialogInfo& info) +{ + // Mac native about box currently can show only name, version, copyright + // and description fields and we also shoehorn the credits text into the + // description but if we have anything else we must use the generic version + if ( info.IsSimple() ) + { + AboutBoxOptions opts; + + opts.Set(kHIAboutBoxNameKey, info.GetName()); + + if ( info.HasVersion() ) + opts.Set(kHIAboutBoxVersionKey, info.GetVersion()); + + if ( info.HasCopyright() ) + opts.Set(kHIAboutBoxCopyrightKey, info.GetCopyright()); + + opts.Set(kHIAboutBoxDescriptionKey, info.GetDescriptionAndCredits()); + + HIAboutBox(opts); + } + else // simple "native" version is not enough + { + // we need to use the full-blown generic version + wxGenericAboutBox(info); + } +} + +#endif // wxUSE_ABOUTDLG diff --git a/src/msw/aboutdlg.cpp b/src/msw/aboutdlg.cpp index 9b6ee683c6..473158c6b8 100644 --- a/src/msw/aboutdlg.cpp +++ b/src/msw/aboutdlg.cpp @@ -35,32 +35,13 @@ // implementation // ============================================================================ -// helper function: returns all array elements in a single comma-separated and -// newline-terminated string -static wxString AllAsString(const wxArrayString& a) -{ - wxString s; - const size_t count = a.size(); - for ( size_t n = 0; n < count; n++ ) - { - s << a[n] << (n == count - 1 ? _T("\n") : _T(", ")); - } - - return s; -} - // our public entry point void wxAboutBox(const wxAboutDialogInfo& info) { // we prefer to show a simple message box if we don't have any fields which // can't be shown in it because as much as there is a standard about box // under MSW at all, this is it - if ( info.HasWebSite() || info.HasIcon() || info.HasLicence() ) - { - // we need to use the full-blown generic version - wxGenericAboutBox(info); - } - else // simple "native" version should do + if ( info.IsSimple() ) { // build the text to show in the box const wxString name = info.GetName(); @@ -73,22 +54,16 @@ void wxAboutBox(const wxAboutDialogInfo& info) if ( info.HasCopyright() ) msg << info.GetCopyright() << _T('\n'); - msg << info.GetDescription() << _T('\n'); - - if ( info.HasDevelopers() ) - msg << _("Developed by ") << AllAsString(info.GetDevelopers()); - - if ( info.HasDocWriters() ) - msg << _("Documentation by ") << AllAsString(info.GetDocWriters()); - - if ( info.HasArtists() ) - msg << _("Graphics art by ") << AllAsString(info.GetArtists()); - - if ( info.HasTranslators() ) - msg << _("Translations by ") << AllAsString(info.GetTranslators()); + // add everything remaining + msg << info.GetDescriptionAndCredits(); wxMessageBox(msg, _T("About ") + name); } + else // simple "native" version is not enough + { + // we need to use the full-blown generic version + wxGenericAboutBox(info); + } } #endif // wxUSE_ABOUTDLG