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
This commit is contained in:
Vadim Zeitlin 2006-10-08 12:07:03 +00:00
parent affebd0a6e
commit fd3f8f5cf5
5 changed files with 161 additions and 42 deletions

View File

@ -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
</set>
<set var="GUI_CMN_HDR" hints="files">
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!
<set var="MSW_SRC" hints="files">
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!
<set var="ADVANCED_CMN_SRC" hints="files">
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!
<set var="ADVANCED_MSW_SRC" hints="files">
src/common/taskbarcmn.cpp
src/msw/aboutdlg.cpp
src/msw/sound.cpp
src/msw/taskbar.cpp
</set>
@ -2700,6 +2700,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="ADVANCED_MAC_SRC" hints="files">
src/common/taskbarcmn.cpp
src/mac/carbon/aboutdlg.cpp
src/mac/carbon/drawer.cpp
src/mac/carbon/sound.cpp
src/mac/carbon/taskbar.cpp

View File

@ -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,

View File

@ -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)
{

View File

@ -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 <vadim@wxwindows.org>
// 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<CFMutableDictionaryRef>
{
public:
AboutBoxOptions() : wxMacCFRefHolder<CFMutableDictionaryRef>
(
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

View File

@ -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