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;
+}
+
// ----------------------------------------------------------------------------
// wxAboutDialog
// ----------------------------------------------------------------------------
wxSizer *sizerIconAndText = new wxBoxSizer(wxHORIZONTAL);
#if wxUSE_STATBMP
wxIcon icon = info.GetIcon();
- if ( !icon.Ok() && wxTheApp )
- {
- const wxTopLevelWindow * const
- tlw = wxDynamicCast(wxTheApp->GetTopWindow(), wxTopLevelWindow);
- if ( tlw )
- icon = tlw->GetIcon();
- }
-
if ( icon.Ok() )
{
sizerIconAndText->Add(new wxStaticBitmap(this, wxID_ANY, icon),
// currently wxAboutBox is implemented natively only under these platforms, for
// the others we provide a generic fallback here
-#if !defined(__WXMSW__) && !defined(__WXMAC__)
+#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXGTK26__)
void wxAboutBox(const wxAboutDialogInfo& info)
{
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/gtk/aboutdlg.cpp
+// Purpose: native GTK+ wxAboutBox() implementation
+// 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 && defined(__WXGTK26__)
+
+#ifndef WX_PRECOMP
+#endif //WX_PRECOMP
+
+#include "wx/aboutdlg.h"
+#include "wx/generic/aboutdlgg.h"
+
+#include "wx/gtk/private.h"
+
+// ----------------------------------------------------------------------------
+// GtkArray: temporary array of GTK strings
+// ----------------------------------------------------------------------------
+
+class GtkArray
+{
+public:
+ GtkArray(const wxArrayString& a)
+ {
+ m_count = a.size();
+ m_strings = new const gchar *[m_count + 1];
+ for ( size_t n = 0; n < m_count; n++ )
+ m_strings[n] = wxGTK_CONV_SYS(a[n]).release();
+
+ // array must be NULL-terminated
+ m_strings[m_count] = NULL;
+ }
+
+ operator const gchar **() const { return m_strings; }
+
+ ~GtkArray()
+ {
+ for ( size_t n = 0; n < m_count; n++ )
+ free(wx_const_cast(gchar *, m_strings[n]));
+
+ delete [] m_strings;
+ }
+
+private:
+ const gchar **m_strings;
+ size_t m_count;
+
+ DECLARE_NO_COPY_CLASS(GtkArray)
+};
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+void wxAboutBox(const wxAboutDialogInfo& info)
+{
+ if ( !gtk_check_version(2,6,0) )
+ {
+ GtkAboutDialog * const dlg = GTK_ABOUT_DIALOG(gtk_about_dialog_new());
+ gtk_about_dialog_set_name(dlg, info.GetName());
+ if ( info.HasVersion() )
+ gtk_about_dialog_set_version(dlg, info.GetVersion());
+ if ( info.HasCopyright() )
+ gtk_about_dialog_set_copyright(dlg, info.GetCopyright());
+ if ( info.HasDescription() )
+ gtk_about_dialog_set_comments(dlg, info.GetDescription());
+ if ( info.HasLicence() )
+ gtk_about_dialog_set_license(dlg, info.GetLicence());
+
+ wxIcon icon = info.GetIcon();
+ if ( icon.Ok() )
+ gtk_about_dialog_set_logo(dlg, info.GetIcon().GetPixbuf());
+
+ if ( info.HasWebSite() )
+ {
+ gtk_about_dialog_set_website(dlg, info.GetWebSiteURL());
+ gtk_about_dialog_set_website_label(dlg, info.GetWebSiteDescription());
+ }
+
+ if ( info.HasDevelopers() )
+ gtk_about_dialog_set_authors(dlg, GtkArray(info.GetDevelopers()));
+ if ( info.HasDocWriters() )
+ gtk_about_dialog_set_documenters(dlg, GtkArray(info.GetDocWriters()));
+ if ( info.HasArtists() )
+ gtk_about_dialog_set_artists(dlg, GtkArray(info.GetArtists()));
+ if ( info.HasTranslators() )
+ gtk_about_dialog_set_translator_credits(dlg, _("translator-credits"));
+
+ gtk_widget_show(GTK_WIDGET(dlg));
+ return;
+ }
+
+ // native about dialog not available, fall back to the generic one
+ wxGenericAboutBox(info);
+}
+
+#endif // wxUSE_ABOUTDLG && GTK+ 2.6+