#!/usr/bin/env python
# -*- coding: utf-8 -*-

#-Imports.----------------------------------------------------------------------

#--wxPython Imports.
import wx


class MyPanel(wx.Panel):
    def __init__(self, parent, id=wx.ID_ANY,
                 pos=wx.DefaultPosition, size=wx.DefaultSize,
                 style=wx.BORDER_SUNKEN, name='panel'):
        wx.Panel.__init__(self, parent, id, pos, size, style, name)


        self.listCtrl1 = wx.ListCtrl(self, id=4, name='listCtrl1',
                pos=wx.Point(56, 40), size=wx.Size(248, 152),
                style=wx.LC_REPORT)

        self.initialization()

        self.listCtrl1.Bind(wx.EVT_LEFT_UP,
              self.OnListCtrl1ListItemActivated, id=4)
        # self.listCtrl1.Bind(wx.EVT_LIST_ITEM_ACTIVATED,
        #       self.OnListCtrl1ListItemActivated, id=4)

        # self.listCtrl1.Bind(wx.EVT_LIST_ITEM_SELECTED,
        #       self.OnListCtrl1ListItemSelected, id=4)
        self.listCtrl1.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK,
              self.OnListCtrl1ListItemRightClick, id=4)

    def initialization(self):

        self.listCtrl1.ClearAll()

        self.listCtrl1.InsertColumn(0, 'id', format =
        wx.LIST_FORMAT_LEFT, width = 20)
        self.listCtrl1.InsertColumn(1, 'Vorname', format =
        wx.LIST_FORMAT_LEFT, width = 90)
        self.listCtrl1.InsertColumn(2, 'Nachname', format =
        wx.LIST_FORMAT_LEFT, width = 90)

        self.listCtrl1.InsertStringItem(0, 'asdf')
        self.listCtrl1.SetStringItem(0, 0, '2')
        self.listCtrl1.SetStringItem(0, 1, 'hello')
        self.listCtrl1.SetStringItem(0, 2, 'world')

    def ShowFrame2(self):
        frame2 = MyFrame2(self)
        frame2.SetTitle('MyFrame2')
        wx.CallAfter(frame2.Show)

    def OnListCtrl1ListItemActivated(self, event):
        # event.Skip()
        wx.CallAfter(self.ShowFrame2)

    def OnListCtrl1ListItemSelected(self, event):
        # event.Skip()
        wx.CallAfter(self.ShowFrame2)


    def OnListCtrl1ListItemRightClick(self, event):
        frame2 = MyFrame2(self)
        frame2.SetTitle('MyFrame2')
        wx.CallAfter(frame2.Show)


class MyFrame1(wx.Frame):
    def __init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString,
                 pos=wx.DefaultPosition, size=wx.DefaultSize,
                 style=wx.DEFAULT_FRAME_STYLE, name='frame'):
        wx.Frame.__init__(self, parent, id, title, pos, size, style, name)

        panel = MyPanel(self)
        self.Bind(wx.EVT_CLOSE, self.OnDestroy)

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


class MyFrame2(wx.Frame):
    def __init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString,
                 pos=wx.DefaultPosition, size=wx.DefaultSize,
                 style=wx.DEFAULT_FRAME_STYLE, name='frame'):
        wx.Frame.__init__(self, parent, id, title, pos, size, style, name)

        panel = MyPanel(self)
        self.Bind(wx.EVT_CLOSE, self.OnDestroy)
        self.Raise()

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


class MyFrame3(wx.Frame):
    def __init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString,
                 pos=wx.DefaultPosition, size=wx.DefaultSize,
                 style=wx.DEFAULT_FRAME_STYLE, name='frame'):
        wx.Frame.__init__(self, parent, id, title, pos, size, style, name)

        panel = MyPanel(self)
        self.Bind(wx.EVT_CLOSE, self.OnDestroy)

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


class MyApp(wx.App):
    def OnInit(self):

        frame1 = MyFrame1(None)
        frame1.SetTitle('MyFrame1')
        self.SetTopWindow(frame1)
        frame1.Show()

        # frame2 = MyFrame2(None)
        # frame2.SetTitle('MyFrame2')
        # # self.SetTopWindow(frame2)
        # frame2.Show()
        #
        # frame3 = MyFrame2(None)
        # frame3.SetTitle('MyFrame3')
        # # self.SetTopWindow(frame3)
        # frame3.Show()

        return True


if __name__ == '__main__':
    gApp = MyApp(redirect=False,
            filename=None,
            useBestVisual=False,
            clearSigInt=True)

    gApp.MainLoop()
