#!/usr/bin/env python
from wxPython.wx import *
from wxPython.lib.editor import wxEditor
#-------------------------------------------------------------------------------
class MyApp(wxApp):
    def OnInit(self):
        frame=MyFrame(NULL, -1, "wxK", wxPoint(-1, -1), wxSize(500, 400), wxDEFAULT_FRAME_STYLE)

        frame.Show(true)
        self.SetTopWindow(frame)

        return true
#-------------------------------------------------------------------------------
class MyFrame(wxFrame):
    ID_WINDOW_LEFT   = 5101
    ID_WINDOW_BOTTOM = 5102
    ID_WINDOW_NEW    = 5103
    ID_WINDOW_QUIT   = 5104
    ID_WINDOW_ABOUT  = 5105
    def __init__(self, parent, ID, title, pos, size, style):
        wxFrame.__init__(self, parent, ID, title, pos, size, style)

        self.InitMenu()
        self.InitToolBar()
        self.InitStatusBar()
        self.InitSplit()

        EVT_SASH_DRAGGED_RANGE(self, self.ID_WINDOW_LEFT, self.ID_WINDOW_BOTTOM, self.OnSashDrag)
        EVT_ERASE_BACKGROUND(self.m_SplitEdit, self.EmptyHandler)
        EVT_SIZE(self, self.OnSize)

    def InitMenu(self):
        menu_file= wxMenu()
        menu_file.Append(self.ID_WINDOW_NEW, "&New window\tCtrl-N", "Create a new child window")
        menu_file.Append(self.ID_WINDOW_QUIT, "&Exit\tAlt-X", "Quit the program")

        menu_help = wxMenu()
        menu_help.Append(self.ID_WINDOW_ABOUT, "&About\tF1")

        menu_bar = wxMenuBar()
        menu_bar.Append(menu_file, "&F)ÆÄÀÏ")
        menu_bar.Append(menu_help, "&Help")

        self.SetMenuBar(menu_bar)

    def InitToolBar(self):
        self.CreateToolBar(wxNO_BORDER | wxTB_FLAT | wxTB_HORIZONTAL)
        self.GetToolBar().Realize();

    def InitStatusBar(self):
        self.CreateStatusBar()

    def InitSplit(self):
        self.m_SplitEdit=wxSplitterWindow(self, -1, wxPoint(0,0), wxSize(300,180), style=wxNO_3D|wxSP_3DSASH|wxSIMPLE_BORDER )

        self.m_NoteBookEdit=wxNotebook(self.m_SplitEdit, -1, wxDefaultPosition, wxSize(80,180), wxNO_3D )
        self.m_Editor=wxEditor(self.m_NoteBookEdit, -1, style=wxSIMPLE_BORDER)
        self.m_NoteBookEdit.AddPage(self.m_Editor, "untitled")

        self.m_NoteBookEdit2=wxNotebook(self.m_SplitEdit, -1, wxDefaultPosition, wxSize(80,180), wxNO_3D )
        self.m_Editor2=wxEditor(self.m_NoteBookEdit2, -1, style=wxSIMPLE_BORDER)
        self.m_NoteBookEdit2.AddPage(self.m_Editor2, "untitled")

        self.m_SplitEdit.SetMinimumPaneSize(20)
        self.m_SplitEdit.SplitVertically(self.m_NoteBookEdit, self.m_NoteBookEdit2, 150)
        self.m_SplitEdit.SetSashPosition(100)

        win = wxSashLayoutWindow(self, self.ID_WINDOW_BOTTOM, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER |wxSW_3D)
        win.SetDefaultSize(wxSize(1000, 100))
        win.SetOrientation(wxLAYOUT_HORIZONTAL)
        win.SetAlignment(wxLAYOUT_BOTTOM)
        win.SetSashVisible(wxSASH_TOP, true)
        self.m_BottomWindow = win

        self.m_NoteBookBottom=wxNotebook(self.m_BottomWindow, id=-1, style=wxNB_BOTTOM| wxNO_3D |wxSIMPLE_BORDER )
        self.m_TextCtrlBottom = wxTextCtrl(self.m_NoteBookBottom, -1, "A help window", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE |wxSIMPLE_BORDER)
        self.m_NoteBookBottom.AddPage(self.m_TextCtrlBottom, "Ãâ·Â1")
        self.m_NoteBookBottom.AddPage(self.m_TextCtrlBottom, "Ãâ·Â2")
        self.m_NoteBookBottom.AddPage(self.m_TextCtrlBottom, "°Ë»ö1")
        self.m_NoteBookBottom.AddPage(self.m_TextCtrlBottom, "°Ë»ö2")
        self.m_NoteBookBottom.AddPage(self.m_TextCtrlBottom, "FTP LOG")

        win =  wxSashLayoutWindow(self, self.ID_WINDOW_LEFT, wxDefaultPosition, wxSize(200, 30), wxNO_BORDER )
        win.SetDefaultSize(wxSize(120, 1000))
        win.SetOrientation(wxLAYOUT_VERTICAL)
        win.SetAlignment(wxLAYOUT_LEFT)
        win.SetSashVisible(wxSASH_RIGHT, TRUE)
        self.m_LeftWindow = win

        self.m_NoteBookLeft=wxNotebook(self.m_LeftWindow, -1, wxDefaultPosition, wxSize(80,180), wxNB_LEFT|wxNO_3D|wxSIMPLE_BORDER )

        self.m_TextCtrlLeft = wxTextCtrl(self.m_NoteBookLeft, -1, "A help window", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxSIMPLE_BORDER )

        self.m_NoteBookLeft.AddPage(self.m_TextCtrlLeft, "ÆÄÀÏ")
        self.m_NoteBookLeft.AddPage(self.m_TextCtrlLeft, "ÇÁ·ÎÁ§Æ®")
        self.m_NoteBookLeft.AddPage(self.m_TextCtrlLeft, "FTP")

    def OnSashDrag(self, event):
        if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE:
            return

        eID = event.GetId()
        if eID == self.ID_WINDOW_LEFT:
            self.m_LeftWindow.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
        elif eID == self.ID_WINDOW_BOTTOM:
            self.m_BottomWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))

        wxLayoutAlgorithm().LayoutWindow(self, self.m_SplitEdit)
        self.m_SplitEdit.Refresh()

    def OnSize(self, event):
        wxLayoutAlgorithm().LayoutWindow(self, self.m_SplitEdit)

    def EmptyHandler(self, evt):
        pass

#-------------------------------------------------------------------------------
if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()
#-------------------------------------------------------------------------------
