summaryrefslogtreecommitdiff
path: root/common/dialog_about
diff options
context:
space:
mode:
Diffstat (limited to 'common/dialog_about')
-rw-r--r--common/dialog_about/AboutDialog_main.cpp501
-rw-r--r--common/dialog_about/aboutinfo.h174
-rw-r--r--common/dialog_about/dialog_about.cpp399
-rw-r--r--common/dialog_about/dialog_about.h99
-rw-r--r--common/dialog_about/dialog_about_base.cpp82
-rw-r--r--common/dialog_about/dialog_about_base.fbp752
-rw-r--r--common/dialog_about/dialog_about_base.h56
7 files changed, 2063 insertions, 0 deletions
diff --git a/common/dialog_about/AboutDialog_main.cpp b/common/dialog_about/AboutDialog_main.cpp
new file mode 100644
index 0000000..662229a
--- /dev/null
+++ b/common/dialog_about/AboutDialog_main.cpp
@@ -0,0 +1,501 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2010-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <dialog_about.h>
+#include <aboutinfo.h>
+#include <wx/aboutdlg.h>
+#include <wx/textctrl.h>
+#include <boost/version.hpp>
+
+
+/* Used icons:
+ * lang_xx_xpm[]; // Icons of various national flags
+ * show_3d_xpm[]; // 3D icon
+ * edit_module_xpm[];
+ * icon_kicad_xpm[]; // Icon of the application
+ */
+#include <bitmaps.h>
+#include <wxstruct.h>
+#include <common.h>
+#include <pgm_base.h>
+#include <build_version.h>
+
+
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY( Contributors )
+
+// Helper functions:
+static wxString HtmlHyperlink( const wxString& url, const wxString& description = wxEmptyString );
+static wxString HtmlNewline( const unsigned int amount = 1 );
+
+
+/**
+ * Initializes the <code>AboutAppInfo</code> object with application specific information.
+ *
+ * This the object which holds all information about the application
+ */
+static void InitKiCadAboutNew( AboutAppInfo& info )
+{
+ // Set application specific icon
+ const wxTopLevelWindow* const tlw = wxDynamicCast( Pgm().App().GetTopWindow(),
+ wxTopLevelWindow );
+
+ if( tlw )
+ info.SetIcon( tlw->GetIcon() );
+ else
+ {
+ wxBitmap bitmap = KiBitmap( icon_kicad_xpm );
+ wxIcon icon;
+
+ icon.CopyFromBitmap( bitmap );
+
+ info.SetIcon( icon );
+ }
+
+ /* Set title */
+ info.SetAppName( wxT( ".: " ) + Pgm().App().GetAppName() + wxT( " :." ) );
+
+ /* Copyright information */
+ info.SetCopyright( wxT( "(C) 1992-2015 KiCad Developers Team" ) );
+
+ /* KiCad build version */
+ wxString version;
+ version << wxT( "Version: " ) << GetBuildVersion()
+#ifdef DEBUG
+ << wxT( ", debug" )
+#else
+ << wxT( ", release" )
+#endif
+ << wxT( " build" );
+
+ info.SetBuildVersion( version );
+
+ /* wxWidgets version */
+ wxString libVersion;
+ libVersion << wxT( "wxWidgets " )
+ << wxMAJOR_VERSION << wxT( "." )
+ << wxMINOR_VERSION << wxT( "." )
+ << wxRELEASE_NUMBER
+
+ /* Unicode or ANSI version */
+#if wxUSE_UNICODE
+ << wxT( " Unicode " );
+#else
+ << wxT( " ANSI " );
+#endif
+
+ // Just in case someone builds KiCad with the platform native of Boost instead of
+ // the version included with the KiCad source.
+ libVersion << wxT( "and Boost " ) << ( BOOST_VERSION / 100000 ) << wxT( "." )
+ << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." ) << ( BOOST_VERSION % 100 )
+ << wxT( "\n" );
+
+ // Operating System Information
+
+ wxPlatformInfo platformInfo;
+
+ libVersion << wxT( "Platform: " ) << wxGetOsDescription() << wxT( ", " )
+ << platformInfo.GetArchName();
+
+ info.SetLibVersion( libVersion );
+
+
+ /* info/description part HTML formatted */
+
+ wxString description;
+
+ /* short description */
+ description << wxT( "<p>" );
+ description << wxT( "<b><u>" )
+ << _( "Description" )
+ << wxT( "</u></b>" ); // bold & underlined font for caption
+
+ description << wxT( "<p>" )
+ << _( "The KiCad EDA Suite is a set of open source applications for the "
+ "creation of electronic schematics and to design printed circuit boards." )
+ << wxT( "</p>" );
+
+ description << wxT( "</p>" );
+
+ /* websites */
+ description << wxT( "<p>" );
+ description << wxT( "<b><u>" )
+ << _( "KiCad on the web" )
+ << wxT( "</u></b>" ); // bold & underlined font for caption
+
+ // bullet-ed list with some http links
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "http://www.kicad-pcb.org" ),
+ _( "The official KiCad website" ) )
+ << wxT( "</li>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://launchpad.net/kicad" ),
+ _( "Developer's website on Launchpad" ) )
+ << wxT("</li>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://github.com/KiCad/" ),
+ _( "Official repository for component and footprint libraries" ) )
+ << wxT( "</li>" );
+ description << wxT( "</ul>" );
+ description << wxT( "</p>" );
+
+ description << wxT( "<p><b><u>" )
+ << _( "Bug tracker" )
+ << wxT( "</u></b>" ); // bold & underlined font caption
+
+ // bullet-ed list with some http links
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://bugs.launchpad.net/kicad/+bugs?orderby=-id&start=0" ),
+ _( "Report or examine bugs" ) )
+ << wxT( "</li>" );
+ description << wxT( "</ul></p>" );
+
+ description << wxT( "<p><b><u>" )
+ << _( "KiCad user's groups and community" )
+ << wxT( "</u></b>" ); // bold & underlined font caption
+
+ description << wxT( "<ul>" );
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://groups.yahoo.com/neo/groups/kicad-users/info" ),
+ _( "KiCad user's group" ) )
+ << wxT( "</li>" );
+
+ description << wxT( "<li>" )
+ << HtmlHyperlink( wxT( "https://forum.kicad.info" ),
+ _( "KiCad forum" ) )
+ << wxT( "</li>" );
+
+ description << wxT( "</ul></p>" );
+
+ info.SetDescription( description );
+
+
+ /* License information also HTML formatted */
+ wxString license;
+ license
+ << wxT( "<div align='center'>" )
+ << HtmlNewline( 4 )
+ << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
+ << HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ),
+ _( "GNU General Public License (GPL) version 3 or any later version" ) )
+ << wxT( "</div>" );
+
+ info.SetLicense( license );
+
+
+ /* A contributor consists of the following information:
+ * Mandatory:
+ * - Name
+ * - EMail address
+ * Optional:
+ * - Category
+ * - Category specific icon
+ *
+ * All contributors of the same category will be enumerated under this category
+ * which should be represented by the same icon.
+ */
+
+ // The core developers
+ info.AddDeveloper( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Dick Hollenbeck" ),
+ wxT( "dick@softplc.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Wayne Stambaugh" ),
+ wxT( "stambaughw@gmail.com" ) ) );
+
+ // alphabetically by last name after main 3 above:
+ info.AddDeveloper( new Contributor( wxT( "Frank Bennett" ),
+ wxT( "bennett78@lpbroadband.net" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Cirilo Bernardo" ),
+ wxT( "cirilo_bernardo@yahoo.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jonas Diemer" ),
+ wxT( "diemer@gmx.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Torsten Hüter" ),
+ wxT( "torstenhtr@gmx.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jerry Jacobs" ),
+ wxT( "xor.gate.engineering@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mario Luzeiro" ),
+ wxT( "mrluzeiro@ua.pt" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Daniel Majewski" ),
+ wxT( "lordblick@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Lorenzo Marcantonio" ),
+ wxT( "lomarcan@tin.it" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Marco Mattila" ),
+ wxT( "marcom99@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Chris Pavlina" ),
+ wxT( "pavlina.chris@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Miguel Angel Ajo Pelayo" ),
+ wxT( "miguelangel@nbee.es" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Jacobo Aragunde Perez" ),
+ wxT( "jaragunde@igalia.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Simon Richter" ),
+ wxT( "Simon.Richter@hogyros.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mark Roszko" ),
+ wxT( "mark.roszko@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Marco Serantoni" ),
+ wxT( "marco.serantoni@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Brian Sidebotham" ),
+ wxT( "brian.sidebotham@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Mateusz Skowroński" ),
+ wxT( "skowri@gmail.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Rafael Sokolowski" ),
+ wxT( "rafael.sokolowski@web.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Vesa Solonen" ),
+ wxT( "vesa.solonen@hut.fi" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Bernhard Stegmaier" ),
+ wxT( "stegmaier@sw-systems.de" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Orson (Maciej Sumiński)" ),
+ wxT( "maciej.suminski@cern.ch" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Tomasz Wlostowski" ),
+ wxT( "tomasz.wlostowski@cern.ch" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Adam Wolf" ),
+ wxT( "adamwolf@feelslikeburning.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Alexander Zakamaldin" ),
+ wxT( "zaka62@mail.ru" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Henner Zeller" ),
+ wxT( "h.zeller@acm.org" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Andrew Zonenberg" ),
+ wxT( "azonenberg@drawersteak.com" ) ) );
+ info.AddDeveloper( new Contributor( wxT( "Nick Østergaard" ),
+ wxT( "oe.nick@gmail.com" ) ) );
+
+ // The document writers
+ info.AddDocWriter( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Marco Ciampa" ),
+ wxT( "ciampix@libero.it" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Dick Hollenbeck" ),
+ wxT( "dick@softplc.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Igor Plyatov" ),
+ wxT( "plyatov@gmail.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Wayne Stambaugh" ),
+ wxT( "stambaughw@gmail.com" ) ) );
+ info.AddDocWriter( new Contributor( wxT( "Fabrizio Tappero" ),
+ wxT( "fabrizio.tappero@gmail.com" ) ) );
+
+ /* The translators
+ * As category the language to which the translation was done is used
+ * and as icon the national flag of the corresponding country.
+ */
+ info.AddTranslator( new Contributor( wxT( "Martin Kratoška" ),
+ wxT( "martin@ok1rr.com" ),
+ wxT( "Czech (CZ)" ),
+ KiBitmapNew( lang_cs_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Jerry Jacobs" ),
+ wxT( "xor.gate.engineering@gmail.com" ),
+ wxT( "Dutch (NL)" ),
+ KiBitmapNew( lang_nl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Vesa Solonen" ),
+ wxT( "vesa.solonen@hut.fi" ),
+ wxT( "Finnish (FI)" ),
+ KiBitmapNew( lang_fi_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Jean-Pierre Charras" ),
+ wxT( "jp.charras@wanadoo.fr" ),
+ wxT( "French (FR)" ),
+ KiBitmapNew( lang_fr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Mateusz Skowroński" ),
+ wxT( "skowri@gmail.com" ),
+ wxT( "Polish (PL)" ),
+ KiBitmapNew( lang_pl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Kerusey Karyu" ),
+ wxT( "keruseykaryu@o2.pl" ),
+ wxT( "Polish (PL)" ),
+ KiBitmapNew( lang_pl_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Renie Marquet" ),
+ wxT( "reniemarquet@uol.com.br" ),
+ wxT( "Portuguese (PT)" ),
+ KiBitmapNew( lang_pt_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Igor Plyatov" ),
+ wxT( "plyatov@gmail.com" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Andrey Fedorushkov" ),
+ wxT( "andrf@mail.ru" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Eldar Khayrullin" ),
+ wxT( "eldar.khayrullin@mail.ru" ),
+ wxT( "Russian (RU)" ),
+ KiBitmapNew( lang_ru_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Pedro Martin del Valle" ),
+ wxT( "pkicad@yahoo.es" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Iñigo Zuluaga" ),
+ wxT( "inigo_zuluaga@yahoo.es" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Iñigo Figuero" ),
+ wxT( "ifs@elektroquark.com" ),
+ wxT( "Spanish (ES)" ),
+ KiBitmapNew( lang_es_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Rafael Sokolowski" ),
+ wxT( "rafael.sokolowski@web.de" ),
+ wxT( "German (DE)" ),
+ KiBitmapNew( lang_de_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Kenta Yonekura" ),
+ wxT( "yoneken@kicad.jp" ),
+ wxT( "Japanese (JA)" ),
+ KiBitmapNew( lang_jp_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Manolis Stefanis" ),
+ wxT( "" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Athanasios Vlastos" ),
+ wxT( "" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Milonas Kostas" ),
+ wxT( "milonas.ko@gmail.com" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Michail Misirlis" ),
+ wxT( "mmisirlis@gmail.com" ),
+ wxT( "Greek (el_GR)" ),
+ KiBitmapNew( lang_gr_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Massimo Cioce" ),
+ wxT( "ciocemax@alice.it" ),
+ wxT( "Italian (IT)" ),
+ KiBitmapNew( lang_it_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Marco Ciampa" ),
+ wxT( "ciampix@libero.it" ),
+ wxT( "Italian (IT)" ),
+ KiBitmapNew( lang_it_xpm ) ) );
+ info.AddTranslator( new Contributor( wxT( "Evgeniy Ivanov" ),
+ wxT( "evgeniy_p_ivanov@yahoo.ca" ),
+ wxT( "Bulgarian (BG)" ),
+ KiBitmapNew( lang_bg_xpm ) ) );
+
+ // TODO: are these all russian translators,
+ // placed them here now,
+ // or else align them below other language maintainer with mail adress
+ info.AddTranslator( new Contributor( wxT( "Remy Halvick" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "David Briscoe" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "Dominique Laigle" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+ info.AddTranslator( new Contributor( wxT( "Paul Burke" ),
+ wxEmptyString,
+ wxT( "Others" ) ) );
+
+ // Programm credits for icons
+ info.AddArtist( new Contributor( wxT( "Iñigo Zuluaga" ),
+ wxT( "inigo_zuluaga@yahoo.es" ),
+ wxT( "Icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Konstantin Baranovskiy" ),
+ wxT( "baranovskiykonstantin@gmail.com" ),
+ wxT( "New icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Fabrizio Tappero" ),
+ wxT( "fabrizio.tappero@gmail.com" ),
+ wxT( "New icons by" ),
+ KiBitmapNew( edit_module_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Christophe Boschat" ),
+ wxT( "nox454@hotmail.fr" ),
+ wxT( "3D models by" ),
+ KiBitmapNew( three_d_xpm ) ) );
+ info.AddArtist( new Contributor( wxT( "Renie Marquet" ),
+ wxT( "reniemarquet@uol.com.br" ),
+ wxT( "3D models by" ),
+ KiBitmapNew( three_d_xpm ) ) );
+
+ // Programm credits for package developers.
+ info.AddPackager( new Contributor( wxT( "Jean-Samuel Reynaud" ),
+ wxT( "js.reynaud@gmail.com" ) ) );
+ info.AddPackager( new Contributor( wxT( "Bernhard Stegmaier" ),
+ wxT( "stegmaier@sw-systems.de" ) ) );
+ info.AddPackager( new Contributor( wxT( "Adam Wolf" ),
+ wxT( "adamwolf@feelslikeburning.com" ) ) );
+ info.AddPackager( new Contributor( wxT( "Nick Østergaard" ),
+ wxT( "oe.nick@gmail.com" ) ) );
+}
+
+
+bool ShowAboutDialog( wxWindow* parent )
+{
+ AboutAppInfo info;
+
+ InitKiCadAboutNew( info );
+
+ dialog_about* dlg = new dialog_about( parent, info );
+ dlg->SetIcon( info.GetIcon() );
+ dlg->Show();
+
+ return true;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Helper functions
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Function HtmlHyperlink
+ *
+ * wraps \a aUrl with a HTML anchor tag containing a hyperlink text reference
+ * to form a HTML hyperlink.
+ *
+ * @param aUrl the url that will be embedded in an anchor tag containing a hyperlink reference
+ * @param aDescription the optional describing text that will be represented as a hyperlink.
+ * If not specified the url will be used as hyperlink.
+ * @return a HTML conform hyperlink like <a href='url'>description</a>
+ */
+static wxString HtmlHyperlink( const wxString& aUrl, const wxString& aDescription )
+{
+ wxString hyperlink = wxEmptyString;
+
+ if( aDescription.IsEmpty() )
+ hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aUrl << wxT( "</a>" );
+ else
+ hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aDescription << wxT( "</a>" );
+
+ return hyperlink;
+}
+
+
+/**
+ * Function HtmlNewline
+ *
+ * creates an HTML newline character sequence of \a aCount.
+ *
+ * @param aCount the number of HTML newline tags to concatenate, default is to return just
+ * one <br> tag.
+ * @return the concatenated amount of HTML newline tag(s) <br>
+ */
+static wxString HtmlNewline( const unsigned int aCount )
+{
+ wxString newlineTags = wxEmptyString;
+
+ for( size_t i = 0; i<aCount; ++i )
+ newlineTags << wxT( "<br>" );
+
+ return newlineTags;
+}
diff --git a/common/dialog_about/aboutinfo.h b/common/dialog_about/aboutinfo.h
new file mode 100644
index 0000000..8e19c59
--- /dev/null
+++ b/common/dialog_about/aboutinfo.h
@@ -0,0 +1,174 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2014 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef ABOUTAPPINFO_H
+#define ABOUTAPPINFO_H
+
+#include <wx/aboutdlg.h>
+#include <wx/bitmap.h>
+#include <wx/dynarray.h>
+
+class Contributor;
+
+WX_DECLARE_OBJARRAY( Contributor, Contributors );
+
+
+/**
+ * An object of this class is meant to be used to store application specific information
+ * like who has contributed in which area of the application, the license, copyright
+ * and other descriptive information.
+ */
+class AboutAppInfo
+{
+public:
+ AboutAppInfo() {};
+ virtual ~AboutAppInfo() {};
+
+ void AddDeveloper( const Contributor* developer )
+ {
+ if( developer != NULL )
+ developers.Add( developer );
+ }
+
+ void AddDocWriter( const Contributor* docwriter )
+ {
+ if( docwriter != NULL )
+ docwriters.Add( docwriter );
+ }
+
+ void AddArtist( const Contributor* artist )
+ {
+ if( artist != NULL )
+ artists.Add( artist );
+ }
+
+ void AddTranslator( const Contributor* translator )
+ {
+ if( translator != NULL )
+ translators.Add( translator );
+ }
+
+ void AddPackager( const Contributor* packager )
+ {
+ if( packager != NULL )
+ packagers.Add( packager );
+ }
+
+ Contributors GetDevelopers() { return developers; }
+ Contributors GetDocWriters() { return docwriters; }
+ Contributors GetArtists() { return artists; }
+ Contributors GetTranslators() { return translators; }
+ Contributors GetPackagers() { return packagers; }
+
+ void SetDescription( const wxString& text ) { description = text; }
+ wxString& GetDescription() { return description; }
+
+ void SetLicense( const wxString& text ) { license = text; }
+ wxString& GetLicense() { return license; }
+
+ void SetCopyright( const wxString& text ) { copyright = text; }
+ wxString GetCopyright()
+ {
+ wxString copyrightText = copyright;
+
+#if wxUSE_UNICODE
+ const wxString utf8_copyrightSign = wxString::FromUTF8( "\xc2\xa9" );
+ copyrightText.Replace( _T( "(c)" ), utf8_copyrightSign );
+ copyrightText.Replace( _T( "(C)" ), utf8_copyrightSign );
+#endif // wxUSE_UNICODE
+
+ return copyrightText;
+ }
+
+ void SetAppName( const wxString& name ) { appName = name; }
+ wxString& GetAppName() { return appName; }
+
+ void SetBuildVersion( const wxString& version ) { buildVersion = version; }
+ wxString& GetBuildVersion() { return buildVersion; }
+
+ void SetLibVersion( const wxString& version ) { libVersion = version; }
+ wxString& GetLibVersion() { return libVersion; }
+
+ void SetIcon( const wxIcon& icon ) { appIcon = icon; }
+ wxIcon& GetIcon() { return appIcon; }
+
+private:
+ Contributors developers;
+ Contributors docwriters;
+ Contributors artists;
+ Contributors translators;
+ Contributors packagers;
+
+ wxString description;
+ wxString license;
+
+ wxString copyright; // Todo: copyright sign in unicode
+ wxString appName;
+ wxString buildVersion;
+ wxString libVersion;
+
+ wxIcon appIcon;
+};
+
+
+/**
+ * A contributor, a person which was involved in the development of the application
+ * or which has contributed in any kind somehow to the project.
+ *
+ * A contributor consists of the following mandatory information:
+ * - Name
+ * - EMail address
+ *
+ * Each contributor can have optional information assigned like:
+ * - A category
+ * - A category specific icon
+ */
+class Contributor
+{
+public:
+ Contributor( const wxString& name,
+ const wxString& email,
+ const wxString& category = wxEmptyString,
+ wxBitmap* icon = NULL ) :
+ m_checked( false )
+ { m_name = name; m_email = email; m_category = category; m_icon = icon; }
+
+ virtual ~Contributor() {}
+
+ wxString& GetName() { return m_name; }
+ wxString& GetEMail() { return m_email; }
+ wxString& GetCategory() { return m_category; }
+ wxBitmap* GetIcon() { return m_icon; }
+ void SetChecked( bool status ) { m_checked = status; }
+ bool IsChecked() { return m_checked; }
+
+private:
+ wxString m_name;
+ wxString m_email;
+ wxString m_category;
+ wxBitmap* m_icon;
+ bool m_checked;
+};
+
+#endif // ABOUTAPPINFO_H
diff --git a/common/dialog_about/dialog_about.cpp b/common/dialog_about/dialog_about.cpp
new file mode 100644
index 0000000..e947c87
--- /dev/null
+++ b/common/dialog_about/dialog_about.cpp
@@ -0,0 +1,399 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <dialog_about.h>
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class dialog_about methods
+///////////////////////////////////////////////////////////////////////////////
+
+dialog_about::dialog_about(wxWindow *parent, AboutAppInfo& appInfo)
+ : dialog_about_base(parent), info(appInfo)
+{
+ picInformation = KiBitmap( info_xpm );
+ picDevelopers = KiBitmap( preference_xpm );
+ picDocWriters = KiBitmap( editor_xpm );
+ picArtists = KiBitmap( palette_xpm );
+ picTranslators = KiBitmap( language_xpm );
+ picLicense = KiBitmap( tools_xpm );
+ picPackagers = KiBitmap( zip_xpm );
+
+ m_bitmapApp->SetBitmap( info.GetIcon() );
+
+ m_staticTextAppTitle->SetLabel( info.GetAppName() );
+ m_staticTextCopyright->SetLabel( info.GetCopyright() );
+ m_staticTextBuildVersion->SetLabel( info.GetBuildVersion() );
+ m_staticTextLibVersion->SetLabel( info.GetLibVersion() );
+
+ DeleteNotebooks();
+ CreateNotebooks();
+
+ GetSizer()->SetSizeHints( this );
+ m_auiNotebook->Update();
+ SetFocus();
+ Centre();
+}
+
+
+dialog_about::~dialog_about()
+{
+}
+
+
+wxFlexGridSizer* dialog_about::CreateFlexGridSizer()
+{
+ // three columns with vertical and horizontal extra space of two pixels
+ wxFlexGridSizer* fgSizer1 = new wxFlexGridSizer( 3, 2, 2 );
+ fgSizer1->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ return fgSizer1;
+}
+
+
+void dialog_about::DeleteNotebooks()
+{
+ for( size_t i=0; i<m_auiNotebook->GetPageCount(); ++i )
+ m_auiNotebook->DeletePage( i );
+}
+
+
+void dialog_about::CreateNotebooks()
+{
+ CreateNotebookHtmlPage( m_auiNotebook, _( "Information" ), picInformation,
+ info.GetDescription() );
+
+ CreateNotebookPage( m_auiNotebook, _( "Developers" ) , picDevelopers, info.GetDevelopers() );
+ CreateNotebookPage( m_auiNotebook, _( "Doc Writers" ), picDocWriters, info.GetDocWriters() );
+
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Artists" ), picArtists, info.GetArtists() );
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Translators" ), picTranslators,
+ info.GetTranslators() );
+ CreateNotebookPageByCategory( m_auiNotebook, _( "Packagers" ), picPackagers,
+ info.GetPackagers() );
+
+ CreateNotebookHtmlPage( m_auiNotebook, _( "License" ), picLicense, info.GetLicense() );
+}
+
+void dialog_about::CreateNotebookPage( wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon, const Contributors& contributors )
+{
+ wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( parent, wxID_ANY,
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow1->SetScrollRate( 5, 5 );
+
+ /* Panel for additional space at the left,
+ * but can also be used to show an additional bitmap.
+ */
+ wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
+
+ wxFlexGridSizer* fgSizer1 = CreateFlexGridSizer();
+
+ for( size_t i=0; i<contributors.GetCount(); ++i )
+ {
+ Contributor* contributor = &contributors.Item( i );
+
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Name of contributor at second column
+ if ( contributor->GetName() != wxEmptyString )
+ {
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetName(),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ // Email address of contributor at third column
+ if ( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+ }
+
+ bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
+ bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
+ m_scrolledWindow1->SetSizer( bSizer );
+ m_scrolledWindow1->Layout();
+ bSizer->Fit( m_scrolledWindow1 );
+ parent->AddPage( m_scrolledWindow1, caption, false, icon );
+}
+
+
+void dialog_about::CreateNotebookPageByCategory(wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors)
+{
+ wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( parent, wxID_ANY,
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow1->SetScrollRate( 5, 5 );
+
+ /* Panel for additional space at the left,
+ * but can also be used to show an additional bitmap.
+ */
+ wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
+
+ wxFlexGridSizer* fgSizer1 = CreateFlexGridSizer();
+
+ for( size_t i=0; i<contributors.GetCount(); ++i )
+ {
+ Contributor* contributor = &contributors.Item( i );
+
+ wxBitmap* icon = contributor->GetIcon();
+ wxString category = contributor->GetCategory();
+
+ /* to construct the next row we expect to have
+ * a category and a contributor that was not considered up to now
+ */
+ if( ( category != wxEmptyString ) && !( contributor->IsChecked() ) )
+ {
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, icon );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Category name at second column
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetCategory() + wxT( ":" ),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false,
+ wxEmptyString ) ); // bold font
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+
+ // Nothing at third column
+ fgSizer1->AddSpacer( 5 );
+
+ // Now, all contributors of the same category will follow
+ for( size_t j=0; j<contributors.GetCount(); ++j )
+ {
+ Contributor* contributor = &contributors.Item( j );
+
+ if ( contributor->GetCategory() == category )
+ {
+ // First column is empty
+ fgSizer1->AddSpacer(5);
+
+ // Name of contributor at second column
+ wxStaticText* m_staticText2 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ wxT(" • ") + contributor->GetName(),
+ wxDefaultPosition,
+ wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText2, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+
+ // Email address of contributor at third column
+ if( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ /* this contributor was added to the GUI,
+ * thus can be ignored next time
+ */
+ contributor->SetChecked( true );
+ }
+ }
+ }
+ else
+ {
+ continue;
+ }
+ }
+
+ /* Now, lets list the remaining contributors that have not been considered
+ * because they were not assigned to any category.
+ */
+ for ( size_t k=0; k<contributors.GetCount(); ++k )
+ {
+ Contributor* contributor = &contributors.Item( k );
+
+ if ( contributor->IsChecked() )
+ continue;
+
+ // Icon at first column
+ wxStaticBitmap* m_bitmap1 = CreateStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
+ fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
+
+ // Name of contributor at second column
+ if( contributor->GetName() != wxEmptyString )
+ {
+ wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
+ contributor->GetName(),
+ wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText1->Wrap( -1 );
+ fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+
+ // Email address of contributor at third column
+ if ( contributor->GetEMail() != wxEmptyString )
+ {
+ wxHyperlinkCtrl* hyperlink = CreateHyperlink( m_scrolledWindow1,
+ contributor->GetEMail() );
+ fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
+ }
+ else
+ {
+ fgSizer1->AddSpacer( 5 );
+ }
+ }
+
+ bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
+ bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
+ m_scrolledWindow1->SetSizer( bSizer );
+ m_scrolledWindow1->Layout();
+ bSizer->Fit( m_scrolledWindow1 );
+ parent->AddPage( m_scrolledWindow1, caption, false, icon );
+}
+
+
+void dialog_about::CreateNotebookHtmlPage( wxAuiNotebook* parent, const wxString& caption,
+ const wxBitmap& icon, const wxString& html )
+{
+ wxPanel* panel = new wxPanel( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ wxTAB_TRAVERSAL );
+
+ wxBoxSizer* bSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxString htmlPage = wxEmptyString, htmlContent = html;
+
+ // to have a unique look background color for HTML pages is set to the default as it is
+ // used for all the other widgets
+ wxString htmlColor = ( this->GetBackgroundColour() ).GetAsString( wxC2S_HTML_SYNTAX );
+
+ // beginning of HTML structure
+ htmlPage.Append( wxT( "<html><body bgcolor='" ) + htmlColor + wxT( "'>" ) );
+
+ htmlPage.Append( htmlContent );
+
+ // end of HTML structure indicated by closing tags
+ htmlPage.Append( wxT( "</body></html>" ) );
+
+ // the HTML page is going to be created with previously created HTML content
+ wxHtmlWindow* htmlWindow = new wxHtmlWindow( panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION );
+
+ // HTML font set to font properties as they are used for widgets to have an unique look
+ // under different platforms with HTML
+ wxFont font = this->GetFont();
+ htmlWindow->SetStandardFonts( font.GetPointSize(), font.GetFaceName(), font.GetFaceName() );
+ htmlWindow->SetPage( htmlPage );
+
+ // the HTML window shall not be used to open external links, thus this task is delegated
+ // to users default browser
+ htmlWindow->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED,
+ wxHtmlLinkEventHandler( dialog_about::OnHtmlLinkClicked ), NULL, this );
+
+ // no additional space around the HTML window as it is also the case by the other notebook pages
+ bSizer->Add( htmlWindow, 1, wxALL|wxEXPAND, 0 );
+ panel->SetSizer( bSizer );
+ panel->Layout();
+ bSizer->Fit( panel );
+ parent->AddPage( panel, caption, false, icon );
+}
+
+
+wxHyperlinkCtrl* dialog_about::CreateHyperlink(wxScrolledWindow* parent, const wxString& email)
+{
+ wxHyperlinkCtrl* hyperlink = new wxHyperlinkCtrl(
+ parent, wxID_ANY,
+ wxT( "<" ) + email + wxT( ">" ), /* the label */
+ wxT( "mailto:" ) + email
+ + wxT( "?subject=KiCad - " )
+ + info.GetBuildVersion()
+ + wxT( " , " ) + info.GetLibVersion()
+ ); /* the url */
+
+ return hyperlink;
+}
+
+
+wxStaticBitmap* dialog_about::CreateStaticBitmap(wxScrolledWindow* parent, wxBitmap* icon)
+{
+ wxStaticBitmap* bitmap = new wxStaticBitmap( parent, wxID_ANY, wxNullBitmap,
+ wxDefaultPosition, wxDefaultSize, 0 );
+
+ if( icon )
+ {
+ bitmap->SetBitmap( *icon );
+ }
+ else
+ {
+ bitmap->SetBitmap( KiBitmap( right_xpm ) );
+ }
+
+ return bitmap;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Event handlers
+///////////////////////////////////////////////////////////////////////////////
+
+void dialog_about::OnClose( wxCloseEvent &event )
+{
+ Destroy();
+}
+
+
+void dialog_about::OnOkClick( wxCommandEvent &event )
+{
+ Destroy();
+}
+
+
+void dialog_about::OnHtmlLinkClicked( wxHtmlLinkEvent& event )
+{
+ ::wxLaunchDefaultBrowser( event.GetLinkInfo().GetHref() );
+}
diff --git a/common/dialog_about/dialog_about.h b/common/dialog_about/dialog_about.h
new file mode 100644
index 0000000..067ee63
--- /dev/null
+++ b/common/dialog_about/dialog_about.h
@@ -0,0 +1,99 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010 Rafael Sokolowski <Rafael.Sokolowski@web.de>
+ * Copyright (C) 2010-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef DIALOG_ABOUT_H
+#define DIALOG_ABOUT_H
+
+#include <wx/html/htmlwin.h>
+#include <wx/statbmp.h>
+#include <wx/stattext.h>
+#include <wx/hyperlink.h>
+
+#include <aboutinfo.h>
+#include <dialog_about_base.h>
+
+/* Pixel information of icons in XPM format.
+ * All KiCad icons are linked into shared library 'libbitmaps.a'.
+ * Icons:
+ * preference_xpm[]; // Icon for 'Developers' tab
+ * editor_xpm[]; // Icon for 'Doc Writers' tab
+ * palette_xpm[]; // Icon for 'Artists' tab
+ * language_xpm[]; // Icon for 'Translators' tab
+ * right_xpm[]; // Right arrow icon for list items
+ * info_xpm[]; // Bulb for description tab
+ * tools_xpm[]; // Sheet of paper icon for license info tab
+ */
+#include <bitmaps.h>
+
+/**
+ * About dialog to show application specific information.
+ * Needs an <code>AboutAppInfo</code> object that contains the data to be displayed.
+ */
+class dialog_about : public dialog_about_base
+{
+private:
+
+ // Icons for the various tabs of wxAuiNotebook
+ wxBitmap picInformation;
+ wxBitmap picDevelopers;
+ wxBitmap picDocWriters;
+ wxBitmap picArtists;
+ wxBitmap picTranslators;
+ wxBitmap picPackagers;
+ wxBitmap picLicense;
+
+ AboutAppInfo info;
+
+public:
+ dialog_about( wxWindow* dlg, AboutAppInfo& appInfo );
+ ~dialog_about();
+
+private:
+ void initDialog();
+ virtual void OnClose( wxCloseEvent& event );
+ virtual void OnOkClick( wxCommandEvent& event );
+ virtual void OnHtmlLinkClicked( wxHtmlLinkEvent& event );
+
+ // Notebook pages
+ wxFlexGridSizer* CreateFlexGridSizer();
+ void DeleteNotebooks();
+ void CreateNotebooks();
+ void CreateNotebookPage( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors );
+ void CreateNotebookPageByCategory( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const Contributors& contributors );
+ void CreateNotebookHtmlPage( wxAuiNotebook* parent,
+ const wxString& caption,
+ const wxBitmap& icon,
+ const wxString& html );
+
+ wxHyperlinkCtrl* CreateHyperlink( wxScrolledWindow* parent, const wxString& email );
+ wxStaticBitmap* CreateStaticBitmap( wxScrolledWindow* parent, wxBitmap* icon );
+};
+
+#endif // DIALOG_ABOUT_H
diff --git a/common/dialog_about/dialog_about_base.cpp b/common/dialog_about/dialog_about_base.cpp
new file mode 100644
index 0000000..19b9db7
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.cpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_about_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+dialog_about_base::dialog_about_base( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
+
+ wxBoxSizer* bSizer1;
+ bSizer1 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer3;
+ bSizer3 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmapApp = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer3->Add( m_bitmapApp, 1, wxALIGN_CENTER|wxALL, 5 );
+
+ wxBoxSizer* b_apptitleSizer;
+ b_apptitleSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextAppTitle = new wxStaticText( this, wxID_ANY, _("App Title"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextAppTitle->Wrap( -1 );
+ m_staticTextAppTitle->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) );
+
+ b_apptitleSizer->Add( m_staticTextAppTitle, 0, wxALIGN_CENTER|wxALL, 5 );
+
+ m_staticTextCopyright = new wxStaticText( this, wxID_ANY, _("Copyright Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextCopyright->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextCopyright, 0, wxALIGN_CENTER|wxALL, 1 );
+
+ m_staticTextBuildVersion = new wxStaticText( this, wxID_ANY, _("Build Version Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextBuildVersion->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextBuildVersion, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+ m_staticTextLibVersion = new wxStaticText( this, wxID_ANY, _("Lib Version Info"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticTextLibVersion->Wrap( -1 );
+ b_apptitleSizer->Add( m_staticTextLibVersion, 0, wxALIGN_CENTER|wxBOTTOM|wxLEFT|wxRIGHT, 5 );
+
+
+ bSizer3->Add( b_apptitleSizer, 10, wxEXPAND, 5 );
+
+
+ bSizer3->Add( 0, 0, 2, wxEXPAND, 5 );
+
+
+ bSizer1->Add( bSizer3, 0, wxEXPAND, 5 );
+
+ wxStaticLine* m_staticline1;
+ m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer1->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
+
+ m_auiNotebook = new wxAuiNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_SCROLL_BUTTONS|wxAUI_NB_TAB_FIXED_WIDTH );
+ m_auiNotebook->SetMinSize( wxSize( 750,350 ) );
+
+
+ bSizer1->Add( m_auiNotebook, 2, wxEXPAND | wxALL, 5 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizer->Realize();
+
+ bSizer1->Add( m_sdbSizer, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ this->SetSizer( bSizer1 );
+ this->Layout();
+}
+
+dialog_about_base::~dialog_about_base()
+{
+}
diff --git a/common/dialog_about/dialog_about_base.fbp b/common/dialog_about/dialog_about_base.fbp
new file mode 100644
index 0000000..e776d48
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.fbp
@@ -0,0 +1,752 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+ <FileVersion major="1" minor="13" />
+ <object class="Project" expanded="1">
+ <property name="class_decoration"></property>
+ <property name="code_generation">C++</property>
+ <property name="disconnect_events">1</property>
+ <property name="disconnect_mode">source_name</property>
+ <property name="disconnect_php_events">0</property>
+ <property name="disconnect_python_events">0</property>
+ <property name="embedded_files_path">res</property>
+ <property name="encoding">UTF-8</property>
+ <property name="event_generation">connect</property>
+ <property name="file">dialog_about_base</property>
+ <property name="first_id">1000</property>
+ <property name="help_provider">none</property>
+ <property name="internationalize">1</property>
+ <property name="name">MyProject</property>
+ <property name="namespace"></property>
+ <property name="path">.</property>
+ <property name="precompiled_header"></property>
+ <property name="relative_path">1</property>
+ <property name="skip_lua_events">1</property>
+ <property name="skip_php_events">1</property>
+ <property name="skip_python_events">1</property>
+ <property name="ui_table">UI</property>
+ <property name="use_enum">1</property>
+ <property name="use_microsoft_bom">0</property>
+ <object class="Dialog" expanded="1">
+ <property name="aui_managed">0</property>
+ <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+ <property name="bg"></property>
+ <property name="center"></property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="enabled">1</property>
+ <property name="event_handler">impl_virtual</property>
+ <property name="extra_style"></property>
+ <property name="fg"></property>
+ <property name="font"></property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="maximum_size"></property>
+ <property name="minimum_size">-1,-1</property>
+ <property name="name">dialog_about_base</property>
+ <property name="pos"></property>
+ <property name="size">750,437</property>
+ <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP</property>
+ <property name="subclass"></property>
+ <property name="title">About...</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnActivate"></event>
+ <event name="OnActivateApp"></event>
+ <event name="OnAuiFindManager"></event>
+ <event name="OnAuiPaneButton"></event>
+ <event name="OnAuiPaneClose"></event>
+ <event name="OnAuiPaneMaximize"></event>
+ <event name="OnAuiPaneRestore"></event>
+ <event name="OnAuiRender"></event>
+ <event name="OnChar"></event>
+ <event name="OnClose"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnHibernate"></event>
+ <event name="OnIconize"></event>
+ <event name="OnIdle"></event>
+ <event name="OnInitDialog"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ <object class="wxBoxSizer" expanded="1">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer1</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">0</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">bSizer3</property>
+ <property name="orient">wxHORIZONTAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">1</property>
+ <object class="spacer" expanded="0">
+ <property name="height">0</property>
+ <property name="permission">protected</property>
+ <property name="width">0</property>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">1</property>
+ <object class="wxStaticBitmap" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="bitmap"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_bitmapApp</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">10</property>
+ <object class="wxBoxSizer" expanded="0">
+ <property name="minimum_size"></property>
+ <property name="name">b_apptitleSizer</property>
+ <property name="orient">wxVERTICAL</property>
+ <property name="permission">none</property>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font">,90,92,14,70,0</property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">App Title</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextAppTitle</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">1</property>
+ <property name="flag">wxALIGN_CENTER|wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Copyright Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextCopyright</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxLEFT|wxRIGHT|wxTOP</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Build Version Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextBuildVersion</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxALIGN_CENTER|wxBOTTOM|wxLEFT|wxRIGHT</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticText" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="label">Lib Version Info</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticTextLibVersion</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxALIGN_CENTRE</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <property name="wrap">-1</property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND</property>
+ <property name="proportion">2</property>
+ <object class="spacer" expanded="0">
+ <property name="height">0</property>
+ <property name="permission">protected</property>
+ <property name="width">0</property>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">0</property>
+ <object class="wxStaticLine" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size"></property>
+ <property name="moveable">1</property>
+ <property name="name">m_staticline1</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">none</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxLI_HORIZONTAL</property>
+ <property name="subclass"></property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="0">
+ <property name="border">5</property>
+ <property name="flag">wxEXPAND | wxALL</property>
+ <property name="proportion">2</property>
+ <object class="wxAuiNotebook" expanded="0">
+ <property name="BottomDockable">1</property>
+ <property name="LeftDockable">1</property>
+ <property name="RightDockable">1</property>
+ <property name="TopDockable">1</property>
+ <property name="aui_layer"></property>
+ <property name="aui_name"></property>
+ <property name="aui_position"></property>
+ <property name="aui_row"></property>
+ <property name="best_size"></property>
+ <property name="bg"></property>
+ <property name="caption"></property>
+ <property name="caption_visible">1</property>
+ <property name="center_pane">0</property>
+ <property name="close_button">1</property>
+ <property name="context_help"></property>
+ <property name="context_menu">1</property>
+ <property name="default_pane">0</property>
+ <property name="dock">Dock</property>
+ <property name="dock_fixed">0</property>
+ <property name="docking">Left</property>
+ <property name="enabled">1</property>
+ <property name="fg"></property>
+ <property name="floatable">1</property>
+ <property name="font"></property>
+ <property name="gripper">0</property>
+ <property name="hidden">0</property>
+ <property name="id">wxID_ANY</property>
+ <property name="max_size"></property>
+ <property name="maximize_button">0</property>
+ <property name="maximum_size"></property>
+ <property name="min_size"></property>
+ <property name="minimize_button">0</property>
+ <property name="minimum_size">750,350</property>
+ <property name="moveable">1</property>
+ <property name="name">m_auiNotebook</property>
+ <property name="pane_border">1</property>
+ <property name="pane_position"></property>
+ <property name="pane_size"></property>
+ <property name="permission">protected</property>
+ <property name="pin_button">1</property>
+ <property name="pos"></property>
+ <property name="resize">Resizable</property>
+ <property name="show">1</property>
+ <property name="size"></property>
+ <property name="style">wxAUI_NB_SCROLL_BUTTONS|wxAUI_NB_TAB_FIXED_WIDTH</property>
+ <property name="subclass"></property>
+ <property name="tab_ctrl_height">-1</property>
+ <property name="toolbar_pane">0</property>
+ <property name="tooltip"></property>
+ <property name="uniform_bitmap_size"></property>
+ <property name="window_extra_style"></property>
+ <property name="window_name"></property>
+ <property name="window_style"></property>
+ <event name="OnAuiNotebookAllowDND"></event>
+ <event name="OnAuiNotebookBeginDrag"></event>
+ <event name="OnAuiNotebookButton"></event>
+ <event name="OnAuiNotebookDragMotion"></event>
+ <event name="OnAuiNotebookEndDrag"></event>
+ <event name="OnAuiNotebookPageChanged"></event>
+ <event name="OnAuiNotebookPageChanging"></event>
+ <event name="OnAuiNotebookPageClose"></event>
+ <event name="OnChar"></event>
+ <event name="OnEnterWindow"></event>
+ <event name="OnEraseBackground"></event>
+ <event name="OnKeyDown"></event>
+ <event name="OnKeyUp"></event>
+ <event name="OnKillFocus"></event>
+ <event name="OnLeaveWindow"></event>
+ <event name="OnLeftDClick"></event>
+ <event name="OnLeftDown"></event>
+ <event name="OnLeftUp"></event>
+ <event name="OnMiddleDClick"></event>
+ <event name="OnMiddleDown"></event>
+ <event name="OnMiddleUp"></event>
+ <event name="OnMotion"></event>
+ <event name="OnMouseEvents"></event>
+ <event name="OnMouseWheel"></event>
+ <event name="OnPaint"></event>
+ <event name="OnRightDClick"></event>
+ <event name="OnRightDown"></event>
+ <event name="OnRightUp"></event>
+ <event name="OnSetFocus"></event>
+ <event name="OnSize"></event>
+ <event name="OnUpdateUI"></event>
+ </object>
+ </object>
+ <object class="sizeritem" expanded="1">
+ <property name="border">5</property>
+ <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
+ <property name="proportion">0</property>
+ <object class="wxStdDialogButtonSizer" expanded="1">
+ <property name="Apply">0</property>
+ <property name="Cancel">0</property>
+ <property name="ContextHelp">0</property>
+ <property name="Help">0</property>
+ <property name="No">0</property>
+ <property name="OK">1</property>
+ <property name="Save">0</property>
+ <property name="Yes">0</property>
+ <property name="minimum_size"></property>
+ <property name="name">m_sdbSizer</property>
+ <property name="permission">protected</property>
+ <event name="OnApplyButtonClick"></event>
+ <event name="OnCancelButtonClick"></event>
+ <event name="OnContextHelpButtonClick"></event>
+ <event name="OnHelpButtonClick"></event>
+ <event name="OnNoButtonClick"></event>
+ <event name="OnOKButtonClick"></event>
+ <event name="OnSaveButtonClick"></event>
+ <event name="OnYesButtonClick"></event>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</wxFormBuilder_Project>
diff --git a/common/dialog_about/dialog_about_base.h b/common/dialog_about/dialog_about_base.h
new file mode 100644
index 0000000..9098984
--- /dev/null
+++ b/common/dialog_about/dialog_about_base.h
@@ -0,0 +1,56 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Jun 5 2014)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIALOG_ABOUT_BASE_H__
+#define __DIALOG_ABOUT_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/statbmp.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/sizer.h>
+#include <wx/statline.h>
+#include <wx/aui/auibook.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class dialog_about_base
+///////////////////////////////////////////////////////////////////////////////
+class dialog_about_base : public wxDialog
+{
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapApp;
+ wxStaticText* m_staticTextAppTitle;
+ wxStaticText* m_staticTextCopyright;
+ wxStaticText* m_staticTextBuildVersion;
+ wxStaticText* m_staticTextLibVersion;
+ wxAuiNotebook* m_auiNotebook;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+
+ public:
+
+ dialog_about_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About..."), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 750,437 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSTAY_ON_TOP );
+ ~dialog_about_base();
+
+};
+
+#endif //__DIALOG_ABOUT_BASE_H__