#!/bin/env python
#----------------------------------------------------------------------------
# Name:         test3.py
# Purpose:      Testing menus and status lines
#
# Author:       Robin Dunn
#
# Created:
# RCS-ID:       $Id$
# Copyright:    (c) 1998 by Total Control Software
# Licence:      wxWindows license
#----------------------------------------------------------------------------


from wxPython.wx import *


#---------------------------------------------------------------------------

class MyCanvas(wxWindow):
    def __init__(self, parent, ID):
        wxWindow.__init__(self, parent, ID)
        self.SetBackgroundColour(wxNamedColor("WHITE"))

    def OnPaint(self, event):
        dc = wxPaintDC(self)
        dc.BeginDrawing()
        size = self.GetClientSize()
        font = wxFont(42, wxSWISS, wxNORMAL, wxNORMAL)
        dc.SetFont(font)
        st = "Python Rules!"
        tw,th, d,e = dc.GetTextExtent(st)
        dc.DrawText(st, (size.width-tw)/2, (size.height-th)/2)
        dc.EndDrawing()

#---------------------------------------------------------------------------

#if wxPlatform == '__WXMSW__':
class MyMiniFrame(wxMiniFrame):
    def __init__(self, parent, ID, title, pos, size, style):
        wxMiniFrame.__init__(self, parent, ID, title, pos, size, style)
        panel = wxPanel(self, -1)
        ID = NewId()
        button = wxButton(panel, ID, "Close Me")
        button.SetPosition(wxPoint(15, 15))
        self.Connect(ID, -1, wxEVT_COMMAND_BUTTON_CLICKED, self.OnCloseMe)

    def OnCloseMe(self, event):
        self.Close(true)

    def OnCloseWindow(self, event):
        self.Destroy()

#---------------------------------------------------------------------------

class MyFrame(wxFrame):
    def __init__(self, parent, id, title):
        wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
                         wxSize(420, 200))
        self.canvas = MyCanvas(self, -1)
        self.CreateStatusBar(2)
        mainmenu = wxMenuBar()
        menu = wxMenu()
        menu.Append(100, 'A &Menu Item', 'the help text')
        menu.Append(101, '&Another', 'Grok!')
        menu.AppendSeparator()
        menu.Append(200, 'E&xit', 'Get the heck outta here!')
        mainmenu.Append(menu, "&It's a menu!")
        self.SetMenuBar(mainmenu)
        if wxPlatform == '__WXMSW__':
            print menu.GetHelpString(100)
            print mainmenu.GetHelpString(101)
            print mainmenu.GetHelpString(200)
            self.DragAcceptFiles(true)

        self.Connect(-1, -1, wxEVT_COMMAND_MENU_SELECTED, self.OnMenuCommand)
        self.Connect(-1, -1, wxEVT_DROP_FILES, self.OnDropFiles)



    def OnCloseWindow(self, event):
        print 'OnCloseWindow'
        self.Destroy()


    def OnSize(self, event):
        size = self.GetClientSize()
        self.canvas.SetSize(size)
        self.SetStatusText("hello, this is a test: (%d, %d)" % (size.width, size.height), 1)

##     def OnMenuHighlight(self, event):
##         mainmenu = self.GetMenuBar()
##         st = mainmenu.GetHelpString(event.GetMenuId())
##         self.SetStatusText('['+st+']', 0)

    def OnMenuCommand(self, event):
        # why isn't this a wxMenuEvent???
        print event, event.GetInt()
        if event.GetInt() == 200:
            self.Close()
        elif event.GetInt() == 101:
            #if wxPlatform == '__WXMSW__':
                win = MyMiniFrame(self, -1, "This is a Mini...",
                              wxPoint(-1, -1), #wxPyDefaultPosition,
                              wxSize(150, 150),
                              wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
                              wxTHICK_FRAME | wxSYSTEM_MENU |
                              wxTINY_CAPTION_HORIZ)
                win.Show(true)
            #else:
            #    print 'Sorry, can\'t do mini\'s...'



    def OnDropFiles(self, event):
        fileList = event.GetFiles()
        for file in fileList:
            print file


#---------------------------------------------------------------------------


class MyApp(wxApp):
    def OnInit(self):
        frame = MyFrame(NULL, -1, "Test 3")
        frame.Show(true)
        self.SetTopWindow(frame)
        return true

#---------------------------------------------------------------------------


def main():
    app = MyApp(0)
    app.MainLoop()


def t():
    import pdb
    pdb.run('main()')

if __name__ == '__main__':
    main()


#----------------------------------------------------------------------------
#
# $Log$
# Revision 1.4  1998/12/16 22:12:46  RD
# Tweaks needed to be able to build wxPython with wxGTK.
#
# Revision 1.3  1998/12/15 20:44:35  RD
# Changed the import semantics from "from wxPython import *" to "from
# wxPython.wx import *"  This is for people who are worried about
# namespace pollution, they can use "from wxPython import wx" and then
# prefix all the wxPython identifiers with "wx."
#
# Added wxTaskbarIcon for wxMSW.
#
# Made the events work for wxGrid.
#
# Added wxConfig.
#
# Added wxMiniFrame for wxGTK, (untested.)
#
# Changed many of the args and return values that were pointers to gdi
# objects to references to reflect changes in the wxWindows API.
#
# Other assorted fixes and additions.
#
# Revision 1.2  1998/08/22 19:51:17  RD
# some tweaks for wxGTK
#
# Revision 1.1  1998/08/09 08:28:05  RD
# Initial version
#
#
