#!/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_MENU_FILE_NEW        = 5103
    ID_MENU_FILE_OPEN       = 5104
    ID_MENU_FILE_CLOSE      = 5105
    ID_MENU_FILE_CLOSEALL   = 5106
    ID_MENU_FILE_QUIT       = 5107
    # ÆíÁý¸Þ´º
    ID_MENU_EDIT_UNDO       = 5201
    ID_MENU_EDIT_REDO       = 5202
    ID_MENU_EDIT_CUT        = 5203
    ID_MENU_EDIT_COPY       = 5204
    ID_MENU_EDIT_PASTE      = 5205
    # Ã£±â¸Þ´º
    ID_MENU_FIND_FIND       = 5301
    ID_MENU_FIND_NEXT       = 5302
    ID_MENU_FIND_PREV       = 5303
    ID_MENU_FIND_NEXT       = 5304
    ID_MENU_FIND_REPLACE    = 5305
    ID_MENU_FIND_FINDINFILES    = 5306
    ID_MENU_FIND_REPLACEINFILES = 5307
    # µµ¿ò¸»¸Þ´º
    ID_MENU_HELP_ABOUT      = 5808
    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):
        #ÆÄÀÏ¸Þ´º
        MenuFile= wxMenu()
        MenuFile.Append(self.ID_MENU_FILE_NEW,     "»õ ÆÄÀÏ\tCtrl+N",  "»õ ÆÄÀÏÀ» ¿­À½")
        MenuFile.Append(self.ID_MENU_FILE_OPEN,    "¿­±â\tCtrl+O",     "ÆÄÀÏÀ» ¿­À½")
        MenuFile.Append(self.ID_MENU_FILE_CLOSE,   "´Ý±â\tCtrl+F4",    "ÆÄÀÏÀ» ´ÝÀ½")
        MenuFile.Append(self.ID_MENU_FILE_CLOSEALL,"¸ðµÎ´Ý±â",         "¸ðµç ÆÄÀÏÀ» ´ÝÀ½")
        MenuFile.AppendSeparator()
        MenuFile.Append(self.ID_MENU_FILE_QUIT,    "³ª°¡±â\tAlt+X",    "wxK¸¦ Á¾·á")
        #ÆíÁý¸Þ´º
        MenuEdit= wxMenu()
        MenuEdit.Append(self.ID_MENU_EDIT_UNDO,     "µÇµ¹¸®±â\tCtrl+Z", "¼öÁ¤Àü »óÅÂ·Î µÇµ¹¸²")
        MenuEdit.Append(self.ID_MENU_EDIT_REDO,     "´Ù½ÃÇÏ±â",         "¼öÁ¤ÈÄ »óÅÂ·Î µÇµ¹¸²")
        MenuEdit.AppendSeparator()
        MenuEdit.Append(self.ID_MENU_EDIT_CUT,      "Àß¶ó³»±â\tCtrl+X", "ºí·°À» Àß¶ó³¿")
        MenuEdit.Append(self.ID_MENU_EDIT_COPY,     "º¹»çÇÏ±â\tCtrl+C", "ºí·°À» º¹»çÇÔ")
        MenuEdit.Append(self.ID_MENU_EDIT_PASTE,    "ºÙ¿©³Ö±â\tCtrl+V", "ºí·°À» ºÙ¿©³ÖÀ½")
        #Ã£±â¸Þ´º
        MenuFind= wxMenu()
        MenuFind.Append(self.ID_MENU_FIND_FIND,     "Ã£±â\tCtrl+F",     "")
        MenuFind.Append(self.ID_MENU_FIND_NEXT,     "´ÙÀ½Ã£±â\tF3",     "")
        MenuFind.Append(self.ID_MENU_FIND_PREV,     "´ÙÀ½Ã£±â\tShift+F3",    "")
        MenuFind.Append(self.ID_MENU_FIND_REPLACE,  "¹Ù²Ù±â\tCtrl+R",   "")
        MenuFind.AppendSeparator()
        MenuFind.Append(self.ID_MENU_FIND_FINDINFILES,      "ÆÄÀÏ¿¡¼­ Ã£±â\tCtrl+Shift+F",  "")
        MenuFind.Append(self.ID_MENU_FIND_REPLACEINFILES,   "ÆÄÀÏ¿¡¼­ ¹Ù²Ù±â\tCtrl+Shift+R","")
        #µµ¿ò¸»¸Þ´º
        MenuHelp = wxMenu()
        MenuHelp.Append(self.ID_MENU_HELP_ABOUT, "wxK´Â\tF1")
        #¸Þ´ºµî·Ï
        MenuBar = wxMenuBar()
        MenuBar.Append(MenuFile, "&F)ÆÄÀÏ")
        MenuBar.Append(MenuEdit, "&E)ÆíÁý")
        MenuBar.Append(MenuFind, "&E)Ã£±â")
        MenuBar.Append(MenuHelp, "&H)µµ¿ò¸»")

        self.SetMenuBar(MenuBar)

        EVT_MENU(self, self.ID_MENU_FILE_OPEN, self.OnMenuFileOpen)

    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_TreeCtrlLeft=wxTreeCtrl(self.m_NoteBookLeft, -1, wxDefaultPosition, wxDefaultSize, 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_TreeCtrlLeft, "ÆÄÀÏ")
        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 OnMenuFileOpen(self, event):
        wxFileSelector('¿­±â')

    def EmptyHandler(self, evt):
        pass

#-------------------------------------------------------------------------------
if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()
#-------------------------------------------------------------------------------
