# -*- coding: iso-8859-1 -*- # Copyright 2007, 2008: Julien Bourdaillet (julien.bourdaillet@lip6.fr), Jean-Gabriel Ganascia (jean-gabriel.ganascia@lip6.fr) # This file is part of MEDITE. # # MEDITE is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # MEDITE is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Foobar; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #---------------------------------------------------------------------------- # Nom: TreePanel.py # Objet: Panel affichant l'arbre des versions # # Authors: Julien Bourdaillet # # Cree: janvier 05 # #---------------------------------------------------------------------------- import wx,sys,os, Utile.constantesGUI, Donnees.arbre, Donnees.planTravail import Controleurs.FInfoManager,Controleurs.DGManager #import images class TreePanel(wx.Panel): def __init__(self,parent,medite): wx.Panel.__init__(self,parent) self.fenetreMedite = medite self.Bind(wx.EVT_SIZE,self.OnSize) self.buildNewTree() self.planTravail = plan = Donnees.planTravail.PlanTravail("","","","","","",Donnees.planTravail.Parametres()) def isTreePanel(self): return True def getTitre(self): return "Arbre des versions" # construit l'objet TreeCtrl ŕ l'init du panel def buildNewTree(self): tID = wx.NewId() self.tree = wx.TreeCtrl(self, tID, wx.DefaultPosition, wx.DefaultSize, wx.TR_HAS_BUTTONS | wx.TR_EDIT_LABELS #| wx.TR_MULTIPLE | wx.TR_HIDE_ROOT ) isz = (16,16) il = wx.ImageList(isz[0], isz[1]) self.fldridx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz)) self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz)) #self.fileidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_REPORT_VIEW, wx.ART_OTHER, isz)) self.imgEtat = il.Add(self.__getImg('etat.bmp')) self.imgVersion = il.Add(self.__getImg('version.bmp')) self.tree.SetImageList(il) self.il = il # NOTE: For some reason tree items have to have a data object in # order to be sorted. Since our compare just uses the labels # we don't need any real data, so we'll just use None below for # the item data. self.root = self.tree.AddRoot("Arbre des versions") self.tree.SetPyData(self.root, None) self.tree.SetItemImage(self.root, self.fldridx, wx.TreeItemIcon_Normal) self.tree.SetItemImage(self.root, self.fldropenidx, wx.TreeItemIcon_Expanded) # 1e init du treeCtrl def initTree(self,auteur, oeuvre): self.planTravail.setAuteur(auteur) self.planTravail.setOeuvre(oeuvre) self.loadTree() # rechargement du treeCtrl def reloadTree(self): self.tree.DeleteChildren(self.root) #self.tree.DeleteAllItems() #del(self.tree) #self.buildNewTree() self.loadTree() # chargmenent du treeCtrl ŕ partir de l'objet Arbre def loadTree(self): if self.fenetreMedite.DGLoaded: #sys.stderr.write('DGLoaded\n') #self.arbre = self.fenetreMedite.cinfos.getArbre(self.fenetreMedite.DGAuteur, self.fenetreMedite.DGOeuvre) fim = Controleurs.FInfoManager.FInfoManager(Controleurs.DGManager.Auteur(self.fenetreMedite.DGAuteur),Controleurs.DGManager.Oeuvre(self.fenetreMedite.DGOeuvre)) self.arbre= fim.getArbre() for version in self.arbre.getListeVersions(): #sys.stderr.write('Vi\n') self.loadNode(version, self.root) self.tree.Expand(self.root) # self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree) # self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, self.tree) # self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree) # self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnBeginEdit, self.tree) # self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnEndEdit, self.tree) # self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivate, self.tree) # # self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) # self.tree.Bind(wx.EVT_RIGHT_DOWN, self.OnRightClick) # self.tree.Bind(wx.EVT_RIGHT_UP, self.OnRightUp) # chargement d'un noeud def loadNode(self, node, pere): #sys.stderr.write('loadNode '+node.getNom()+'\n') child = self.tree.AppendItem(pere, node.getNom()) self.tree.SetPyData(child, None) if isinstance(node,Donnees.arbre.Etat): # état self.tree.SetItemImage(child, self.imgEtat, wx.TreeItemIcon_Normal) else: #version self.tree.SetItemImage(child, self.imgVersion, wx.TreeItemIcon_Normal) # self.tree.SetItemImage(child, fldropenidx, wx.TreeItemIcon_Expanded) for fils in node.getListeFils(): self.loadNode(fils, child) def OnSize(self, event): w,h = self.GetClientSizeTuple() self.tree.SetDimensions(0, 0, w, h) def __getImg(self,pNom): chem=os.path.join(Utile.constantesGUI.REPIMG,pNom) return wx.Bitmap(chem,wx.BITMAP_TYPE_BMP)