X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Editeur%2FObjecttreeitem.py;h=70b404f805ed8001645fdecde3d618744c3d6761;hb=f7e5eeea6ebd169ce1f92bb3fe5439f3010c8a16;hp=7e9ff7db0f9c00b48af2539b031e00551467ff13;hpb=fcd054a825fbe171652108194c0204f8e3fd955a;p=tools%2Feficas.git diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 7e9ff7db..70b404f8 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -1,3 +1,23 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM 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. +# +# THIS PROGRAM 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 THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # import généraux @@ -5,6 +25,10 @@ import types,string,os,glob,imp,sys from repr import Repr from copy import copy,deepcopy +# import du chargeur de composants +from comploader import gettreeitem,make_objecttreeitem +import treewidget + myrepr = Repr() myrepr.maxstring = 100 myrepr.maxother = 100 @@ -17,6 +41,16 @@ class TreeItem: is used. """ + # itemNode est une factory qui doit retourner un objet de la classe Node + # ou dérivé de cette classe. + # Le widget arbre utilisera cet objet comme noeud associé au tree item. + # Par defaut, utilise la classe Node de base + # La signature de la factory est la suivante : + # itemNode(treeOrNode,item,command,rmenu) + # ou treeOrNode est le noeud parent, item est l'item associé + # command est une fonction python appelée sur sélection graphique + # du noeud et rmenu est une fonction python appelée sur click droit sur le noeud + itemNode=treewidget.Node def __init__(self): """Constructor. Do whatever you need to do.""" @@ -102,20 +136,32 @@ class ObjectTreeItem(TreeItem,Delegate): def __init__(self, appli, labeltext, object, setfunction=None): self.labeltext = labeltext self.appli = appli + # L'objet délegué est stocké dans l'attribut object + # L'objet associé à l'item est stocké dans l'attribut _object + # Il peut etre obtenu par appel à la méthode getObject + # Attention : le délégué peut etre différent de l'objet associé (MCLIST) + # Dans le cas d'une MCListe de longueur 1, l'objet associé est la MCListe + # et l'objet délégué est le MCFACT (object = _object.data[0]) Delegate.__init__(self,object) - #self.object = object + # On cache l'objet initial (pour destruction eventuelle + # ultérieure) + self._object = object self.setfunction = setfunction self.expandable = 1 + self.sublist=[] self.init() def init(self): return + def getObject(self): + return self._object + def copy(self): """ Crée un item copie de self """ - object = self.object.copy() + object = self._object.copy() appli = copy(self.appli) labeltext = copy(self.labeltext) fonction = deepcopy(self.setfunction) @@ -128,6 +174,13 @@ class ObjectTreeItem(TreeItem,Delegate): else: return 1 + def update(self,item): + """ + Met a jour l'item courant a partir d'un autre item passe en argument + Ne fait rien par defaut + """ + pass + def GetLabelText(self): """ Retourne 3 valeurs : - le texte à afficher dans le noeud représentant l'item @@ -137,13 +190,6 @@ class ObjectTreeItem(TreeItem,Delegate): # None --> fonte et couleur par défaut return self.labeltext,None,None - #def get_attribut(self,nom_attribut) : - # """ - # Retourne l'attribut de nom nom_attribut de l'objet sur lequel - # pointe self s'il existe, None sinon - # """ - # return self.object.get_attribut(nom_attribut) - def get_nature(self) : """ Retourne la nature de l'item et de l'objet @@ -207,6 +253,41 @@ class ObjectTreeItem(TreeItem,Delegate): # l contient les anciens mots-clés + le nouveau dans l'ordre return l.index(nom_fils) + def append_child(self,name,pos=None): + """ + Permet d'ajouter un item fils à self + """ + if pos == 'first': + index = 0 + elif pos == 'last': + index = len(self.liste_mc_presents()) + elif type(pos) == types.IntType : + # la position est fixée + index = pos + elif type(pos) == types.InstanceType: + # pos est un item. Il faut inserer name apres pos + index = self.get_index(pos) +1 + elif type(name) == types.InstanceType: + index = self.get_index_child(name.nom) + else: + index = self.get_index_child(name) + return self.addobject(name,index) + + def append_brother(self,name,pos='after'): + """ + Permet d'ajouter un frère à self + par défaut on l'ajoute après self + """ + index = self._object.parent.get_index(self.getObject()) + if pos == 'before': + index = index + elif pos == 'after': + index = index +1 + else: + print str(pos)," n'est pas un index valide pour append_brother" + return + return self.parent.addobject(name,index) + def get_nom_etape(self): """Retourne le nom de self """ return self.object.get_nom_etape() @@ -230,7 +311,6 @@ class ObjectTreeItem(TreeItem,Delegate): def get_jdc(self): """ Retourne le jdc auquel appartient l'objet pointé par self """ return self.object.jdc - #return self.object.get_attribut('jdc') def get_valeur(self): """ Retourne la valeur de l'objet pointé par self """ @@ -246,6 +326,7 @@ class ObjectTreeItem(TreeItem,Delegate): représentatif de self.object --> à surcharger par les différents items """ + raise Exception("MESSAGE AU DEVELOPPEUR : il faut surcharger la methode get_objet_commentarise() pour la classe "+self.__class__.__name__) pass def isvalid(self): @@ -259,32 +340,6 @@ class ObjectTreeItem(TreeItem,Delegate): """ return 0 - def isMCList(self): - """ Retourne 1 si l'objet pointé par self est une MClist, 0 sinon""" - #if isinstance(self.object,MCList) : - if self.object.__class__.__name__ == 'MCList': - return 1 - else : - return 0 - - def isCommande(self): - """ - Retourne 1 si l'objet pointé par self est une Commande, 0 sinon - """ - return 0 - - def isJdc(self): - """ - Retourne 1 si l'objet pointé par self est un JDC, 0 sinon - """ - return 0 - - def isMCFact(self): - """ - Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon - """ - return 0 - def get_mc_presents(self): """ Retourne le dictionnaire des mots-clés présents de l'objet pointé par self """ return self.object.dict_mc_presents() @@ -294,18 +349,15 @@ class ObjectTreeItem(TreeItem,Delegate): def get_fr(self): """ Retourne le fr de l'objet pointé par self """ - try: - return self.object.get_fr() - except: - return '' + return self.object.get_fr() def get_docu(self): """ Retourne la clé de doc de l'objet pointé par self """ return self.object.get_docu() - def set_valeur(self,new_valeur,evaluation='oui'): + def set_valeur(self,new_valeur): """ Remplace la valeur de l'objet pointé par self par new_valeur """ - return self.object.set_valeur(new_valeur,evaluation=evaluation) + return self.object.set_valeur(new_valeur) def GetText(self): return myrepr.repr(self.object) @@ -367,93 +419,76 @@ class AtomicObjectTreeItem(ObjectTreeItem): class SequenceTreeItem(ObjectTreeItem): def IsExpandable(self): - return len(self.object) > 0 + return len(self._object) > 0 def __len__(self) : - return len(self.object) + return len(self._object) def keys(self): - return range(len(self.object)) + return range(len(self._object)) def GetIconName(self): - if self.object.isvalid(): + if self._object.isvalid(): return "ast-green-los" - elif self.object.isoblig(): + elif self._object.isoblig(): return "ast-red-los" else: return "ast-yel-los" def ajout_possible(self): - return self.object.ajout_possible() + return self._object.ajout_possible() def get_index(self,child): """ Retourne le numéro de child dans la liste des enfants de self """ - return self.object.get_index(child.object) + return self._object.get_index(child.getObject()) def GetText(self): return " " + def additem(self,obj,pos): + self._object.insert(pos,obj) + item = self.make_objecttreeitem(self.appli, obj.nom + ":", obj) + return item + def suppitem(self,item): - if not self.object.isMCList():return 1 try : - self.object.remove(item.object) + self._object.remove(item.getObject()) # la liste peut être retournée vide ! - message = "Mot-clé " + item.object.nom + " supprimé" + message = "Mot-clé " + item.getObject().nom + " supprimé" self.appli.affiche_infos(message) return 1 except: return 0 def GetSubList(self): + isublist=iter(self.sublist) + liste=self._object.data + iliste=iter(liste) + self.sublist=[] + + while(1): + old_obj=obj=None + for item in isublist: + old_obj=item.getObject() + if old_obj in liste:break + + for obj in iliste: + if obj is old_obj:break + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object=value + it = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + self.sublist.append(it) + if old_obj is None and obj is None:break + if old_obj is obj: self.sublist.append(item) + return self.sublist + + def GetSubList_BAK(self): + raise "OBSOLETE" sublist = [] - for obj in self.object.data: + for obj in self._object.data: def setfunction(value, object=obj): object = value item = make_objecttreeitem(self.appli, obj.nom + ":", obj, setfunction) sublist.append(item) return sublist - -def gettreeitem(object): - """ - Cette fonction retourne la classe item associée à l'objet object. - Cette classe item dépend bien sûr de la nature de object, d'où - l'interrogation du dictionnaire composants - """ - if type(object) == types.InstanceType: - # On cherche d abord dans les composants (plugins) - try: - return composants[object.__class__] - except: - # On cherche une eventuelle classe heritee (aleatoire car sans ordre) - for e in composants.keys(): - if isinstance(object,e):return composants[e] - # On n'a rien trouve dans les composants - return ObjectTreeItem - -def charger_composants(): - """ - Cette fonction a pour but de charger tous les modules composants graphiques - (fichiers compo*.py dans le même répertoire que ce module ) - et de remplir le dictionnaire composants utilisé par make_objecttreeitem - """ - composants={} - repertoire=os.path.dirname(__file__) - listfich=glob.glob(os.path.join(repertoire, "compo*.py")) - for fichier in listfich: - m= os.path.basename(fichier)[:-3] - module=__import__(m,globals(),locals()) - composants[module.objet]=module.treeitem - return composants - -def make_objecttreeitem(appli,labeltext, object, setfunction=None): - """ - Cette fonction permet de construire et de retourner un objet - de type item associé à l'object passé en argument. - """ - c = gettreeitem(object) - return c(appli,labeltext, object, setfunction) - -# Dictionnaire {object : item} permettant d'associer un item à un object -# Ce dictionnaire est renseigné par la méthode charger_composants -composants = charger_composants() -