+ wxString s;
+ const size_t count = a.size();
+ s.reserve(20*count);
+ for ( size_t n = 0; n < count; n++ )
+ {
+ s << a[n] << (n == count - 1 ? _T("\n") : _T(", "));
+ }
+
+ return s;
+}
+
+// ----------------------------------------------------------------------------
+// wxAboutDialogInfo
+// ----------------------------------------------------------------------------
+
+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;
+}
+
+wxIcon wxAboutDialogInfo::GetIcon() const
+{
+ wxIcon icon = m_icon;
+ if ( !icon.Ok() && wxTheApp )
+ {
+ const wxTopLevelWindow * const
+ tlw = wxDynamicCast(wxTheApp->GetTopWindow(), wxTopLevelWindow);
+ if ( tlw )
+ icon = tlw->GetIcon();
+ }
+
+ return icon;
+}
+
+// ----------------------------------------------------------------------------
+// wxGenericAboutDialog
+// ----------------------------------------------------------------------------
+
+bool wxGenericAboutDialog::Create(const wxAboutDialogInfo& info)
+{
+ // this is a modal dialog thus we'll use GetParentForModalDialog:
+ if ( !wxDialog::Create(GetParentForModalDialog(), wxID_ANY, _("About ") + info.GetName(),
+ wxDefaultPosition, wxDefaultSize, wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE) )