import wx
import os
import sys

try:
    dirName = os.path.dirname(os.path.abspath(__file__))
except:
    dirName = os.path.dirname(os.path.abspath(sys.argv[0]))

sys.path.append(os.path.split(dirName)[0])

#from agw import aui
try:
    from agw import aui
except ImportError: # if it's not there locally, try the wxPython lib.
    import wx.lib.agw.aui as aui
try:
    from agw import aui
except ImportError: # if it's not there locally, try the wxPython lib.
    import wx.lib.agw.flatnotebook as fnb

#from agw import flatnotebook as fnb
class ViewTreeIndex():
    def __init__(self,
                 panel):
        self.panel = panel
        if wx.Platform == '__WXMSW__'\
        or wx.Platform == '__WXMAC__':
            #self.tree = wx.TreeCtrl(self.panel,pos=(POS_X_TREECTRL,POS_Y_TREECTRL),size=(SIZE_X_TREECTRL,SIZE_Y_TREECTRL))
            self.treeInd = wx.TreeCtrl(self.panel,pos=(-1,-1),size=(-1,-1),style=wx.BORDER|wx.TR_DEFAULT_STYLE)
        else:
            #self.tree = wx.TreeCtrl(self.panel,pos=(POS_X_TREECTRL,POS_Y_TREECTRL),size=(SIZE_X_TREECTRL,SIZE_Y_TREECTRL),style=wx.BORDER|wx.TR_DEFAULT_STYLE)
            self.treeInd = wx.TreeCtrl(self.panel,pos=(-1,-1),size=(-1,-1),style=wx.BORDER|wx.TR_DEFAULT_STYLE)

        #if TREE_IND_IMG_Y_N == 'y':
        #    listaImg = wx.ImageList(DIM_X_ICON, DIM_Y_ICON)
        #    self.treeInd.AssignImageList(listaImg)
        #    for i in range(len(LISTCTRIMGIND)):
        #        bmp = wx.Bitmap(PATHIMG + LISTCTRIMGIND[i], wx.BITMAP_TYPE_GIF)
        #        listaImg.Add(bmp) 


        self.treeInd.SetFont(wx.Font(11,wx.SWISS,wx.NORMAL,wx.NORMAL,False))
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.treeInd,1, wx.EXPAND, 5)
        self.panel.SetSizer(sizer)
        self.treeInd.SetBackgroundColour('#f6f2f2') #ede4e4
        root = self.rootTreeInd = self.treeInd.AddRoot('Index')

        self.treeInd.SetItemTextColour(self.rootTreeInd, '#0f015f')
        font = wx.Font(11, wx.SWISS, wx.NORMAL, wx.BOLD)
        self.treeInd.SetItemFont(self.rootTreeInd ,font)
                  
        self.treeInd.Expand(self.rootTreeInd)

class BuildPanelOpz(object):
    def buildPanelOpz(self,notebookOpz,panelBottom):
        #definizione pannello indici
        self.panelIndex = wx.Panel(notebookOpz,-1,style=wx.BORDER)

        #definizione pannello trigger
        self.panelTrigger = wx.Panel(notebookOpz,-1,style=wx.BORDER)

        #definizione pannello view
        self.panelView = wx.Panel(notebookOpz,-1,style=wx.BORDER)

        self.panelSqlQuery = wx.Panel(notebookOpz,-1,style=wx.BORDER)
 
        notebookOpz.AddPage(self.panelIndex, 'Page1', '')

        notebookOpz.AddPage(self.panelTrigger, 'Page2', '')

        notebookOpz.AddPage(self.panelView, 'Page3', '')

        notebookOpz.AddPage(self.panelSqlQuery, 'Page4', '')

        sizer = wx.BoxSizer()
        sizer.Add(notebookOpz,1, wx.EXPAND, 5)
        panelBottom.SetSizer(sizer)
        panelBottom.Layout()

    buildPanelOpz = classmethod(buildPanelOpz)

class MyAUIManager(object):
    def buildAUIManager(self,parent,wSize):
        #print 'wsize',wSize #(800,600)
        self.panelTree = wx.Panel(parent, -1, size=wx.DefaultSize,style=wx.BORDER)
        self.panelRight = wx.Panel(parent, -1, size=wx.DefaultSize,style=wx.BORDER)
        self.panelBottom = wx.Panel(parent, -1, size=wx.DefaultSize,style=wx.BORDER)

        self.auimanager = aui.AuiManager()
        self.auimanager.SetManagedWindow(parent)
        self.auimanager.SetDockSizeConstraint(0.7, 0.7)

        print wSize
        self.auimanager.AddPane(self.panelBottom,
                aui.AuiPaneInfo().
                Name("Option").
                CloseButton(False).Bottom().
                Caption("PanelBottom").CaptionVisible(True).
                MinimizeButton(True).MaximizeButton(True).
                BestSize(wx.Size(-1, wSize[1]*0.3)))
        
        self.auimanager.AddPane(self.panelRight,
                aui.AuiPaneInfo().
                CenterPane().
                CloseButton(False).
                Caption("PanelUp").CaptionVisible(True).
                MinimizeButton(True).MaximizeButton(True))

        self.auimanager.AddPane(self.panelTree,
                #wx.aui.AuiPaneInfo().Left().Layer(1).CloseButton(False).Fixed())
                aui.AuiPaneInfo().
                Left().CloseButton(False).Layer(1).
                Caption("PanelLeft").CaptionVisible(True).
                MinimizeButton(True).MaximizeButton(True).
                BestSize(wx.Size(wSize[0] * 0.3, -1)))

        self.notebook = fnb.FlatNotebook(self.panelRight,-1,agwStyle=fnb.FNB_NODRAG)
        style = self.notebook.GetAGWWindowStyleFlag()
        # set new style
        style |= fnb.FNB_VC8|fnb.FNB_X_ON_TAB|fnb.FNB_NO_X_BUTTON

        self.notebook.SetAGWWindowStyleFlag(style)
            

        #notebook.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.OnClosingPageNotebook)
        #notebook.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.OnClosedPageNotebook)
        sizer = wx.BoxSizer()
        sizer.Add(self.notebook,1, wx.EXPAND, 5)
        self.panelRight.SetSizer(sizer)
        self.panelRight.Layout()
        # -> fine

        self.notebookOpz = fnb.FlatNotebook(self.panelBottom,-1,agwStyle=fnb.FNB_NODRAG)
        style = self.notebookOpz.GetAGWWindowStyleFlag()
        # set new style
        style |= fnb.FNB_VC8|fnb.FNB_NO_X_BUTTON|fnb.FNB_NOWHERE
        self.notebookOpz.SetAGWWindowStyleFlag(style)
                                                            

        flag = aui.AUI_MGR_ALLOW_ACTIVE_PANE
        self.auimanager.SetAGWFlags(self.auimanager.GetAGWFlags() ^ flag)        
        #self.auimanager.Update()

    buildAUIManager = classmethod(buildAUIManager)

if __name__ == '__main__':
    app = wx.PySimpleApp()  
    frame = wx.Frame(None,-1,size=(800,600))
    #definisci l'auimanager personalizzato
    MyAUIManager.buildAUIManager(frame,(800,600))
    #definisce il pannello delle opzioni all'iterno dell'auimanager personalizzato
    BuildPanelOpz.buildPanelOpz(MyAUIManager.notebookOpz,MyAUIManager.panelBottom)
    MyAUIManager.auimanager.Update()
    viewtreeindex = ViewTreeIndex(BuildPanelOpz.panelIndex)
    viewtreeindex = ViewTreeIndex(BuildPanelOpz.panelTrigger)
    
    frame.Show()
    app.MainLoop()
