"""
About box with general info

@copyright: 2002-2007 Alberto Griggio
@copyright: 2014-2016 Carsten Grohmann
@copyright: 2017 Dietmar Schwertberger
@license: MIT (see LICENSE.txt) - THIS PROGRAM COMES WITH NO WARRANTY
"""

import bugdialog
import codecs
import wx
import wx.html
import wx.lib.wxpTag
import config
import misc
import os.path


class wxGladeAboutBox(wx.Dialog):
    text = '''
    <html>
    <body bgcolor="%s">
    <!-- <font size="-1"> -->
    <center>
    <table align="center" border="2" cellspacing="0">
    <tr>
    <td align="center"><img src="%s">
    </td></tr>
    <tr><td bgcolor="#000000" align="center">
    <font color="#ffffff">Version %s on Python %s and wxPython %s</font>
    </td></tr>
    </table>
    </center>
    <!-- </font> -->
    <table border="0" cellpadding="0" cellspacing="0">
    <tr><td width="50"></td><td>
    <!-- <font size="-1"> -->
    <b><p>License: MIT (see <a href="show_license">LICENSE.txt</a>)</b><br>
    <!-- wxPyColourChooser code copyright (c) 2002-2004 <br>Michael Gilfix 
    (wxWindows license) -->
    <p>Home page:
    <a href="http://wxglade.sourceforge.net">http://wxglade.sourceforge.net</a>
    <p>For credits, see
    <a href="show_credits">CREDITS.txt</a>.<!-- </font> --></td>
    </tr></table>
    </body>
    </html>
    '''

    def __init__(self, parent=None):
        wx.Dialog.__init__(self, parent, -1, _('About wxGlade'))
        html = wx.html.HtmlWindow(self, -1, size=(480, 250))
        html.Bind(wx.html.EVT_HTML_LINK_CLICKED, self.OnLinkClicked)
        # it's recommended at least for GTK2 based wxPython
        if "gtk2" in wx.PlatformInfo:
            html.SetStandardFonts()
        bgcolor = misc.color_to_string(self.GetBackgroundColour())
        icon_path = os.path.join(config.icons_path, 'wxglade_small.png')
        html.SetPage( self.text % (bgcolor, icon_path, config.version, config.py_version, config.wx_version) )
        ir = html.GetInternalRepresentation()
        ir.SetIndent(0, wx.html.HTML_INDENT_ALL)
        html.SetSize((ir.GetWidth(), ir.GetHeight()))
        szr = wx.BoxSizer(wx.VERTICAL)
        szr.Add(html, 0, wx.TOP|wx.ALIGN_CENTER, 10)
        szr.Add(wx.StaticLine(self, -1), 0, wx.LEFT|wx.RIGHT|wx.EXPAND, 20)
        szr2 = wx.BoxSizer(wx.HORIZONTAL)
        btn = wx.Button(self, wx.ID_OK, _("OK"))
        btn.SetDefault()
        szr2.Add(btn)
        if wx.Platform == '__WXGTK__':
            extra_border = 5  # border around a default button
        else:
            extra_border = 0
        szr.Add(szr2, 0, wx.ALL|wx.ALIGN_RIGHT, 20 + extra_border)
        self.SetAutoLayout(True)
        self.SetSizer(szr)
        szr.Fit(self)
        self.Layout()
        if parent: self.CenterOnParent()
        else: self.CenterOnScreen()

    def OnLinkClicked(self, event):
        href = event.GetLinkInfo().GetHref()
        if href == 'show_license':
            if config.license_file:
                from wx.lib.dialogs import ScrolledMessageDialog
                try:
                    license_file = codecs.open(config.license_file, encoding='UTF-8')
                    dlg = ScrolledMessageDialog( self, license_file.read(), "wxGlade - License" )
                    license_file.close()
                    dlg.ShowModal()
                    dlg.Destroy()
                except EnvironmentError as inst:
                    bugdialog.ShowEnvironmentError(
                        _('''Can't read the file "LICENSE.txt".\n\nYou can get a license copy at\n'''
                          '''http://www.opensource.org/licenses/mit-license.php'''), inst)
            else:
                wx.MessageBox(_('File "LICENSE.txt" not found!\nYou can get a license copy at\n'
                                'http://www.opensource.org/licenses/mit-license.php'),
                              _('Error'), wx.OK | wx.CENTRE | wx.ICON_EXCLAMATION)
        elif href == 'show_credits':
            if config.credits_file:
                from wx.lib.dialogs import ScrolledMessageDialog
                try:
                    credits_file = codecs.open( config.credits_file, encoding='UTF-8' )
                    dlg = ScrolledMessageDialog( self, credits_file.read(), _("wxGlade - Credits") )
                    credits_file.close()
                    dlg.ShowModal()
                    dlg.Destroy()
                except EnvironmentError as inst:
                    bugdialog.ShowEnvironmentError(_('''Can't read the file "CREDITS.txt"'''), inst)
            else:
                wx.MessageBox(_('File "CREDITS.txt" not found!'), _('Error'),
                              wx.OK | wx.CENTRE | wx.ICON_EXCLAMATION)
        else:
            import webbrowser
            webbrowser.open(href, new=True)