From: Pascale Noyret Date: Tue, 30 Sep 2008 14:18:31 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: V1_14QT4v1~9 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=0edf0ce43ccf04444502063d214607cdd4088cd9;p=tools%2Feficas.git *** empty log message *** --- diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index ee1b79a0..c12b643d 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -32,7 +32,6 @@ class JDCTree( QTreeWidget ): self.item = jdc_item self.tree = self - self.QWParent = QWParent self.editor = QWParent self.appliEficas = self.editor.appliEficas @@ -52,7 +51,6 @@ class JDCTree( QTreeWidget ): def contextMenuEvent(self,event) : - print "contextMenuEvent" coord=event.globalPos() item= self.currentItem() self.handleContextMenu(item,coord) @@ -65,6 +63,7 @@ class JDCTree( QTreeWidget ): @param coord the position of the mouse pointer (QPoint) Attention : existeMenu permet de savoir si un menu est associe a cet item """ + if item == None : return if item.existeMenu == 0 : return if item.menu == None: item.createPopUpMenu() @@ -75,8 +74,8 @@ class JDCTree( QTreeWidget ): item.affichePanneau() try : fr = item.item.get_fr() - if self.QWParent: - self.QWParent.affiche_infos(fr) + if self.editor: + self.editor.affiche_infos(fr) except: pass @@ -106,17 +105,30 @@ class JDCNode(QTreeWidgetItem): self.menu=None self.existeMenu=1 - def build_children(self): + self.item.connect("valid",self.onValid,()) + self.item.connect("supp" ,self.onAdd,()) + self.item.connect("add" ,self.onSupp,()) + + def build_children(self,posInsertion=10000): """ Construit la liste des enfants de self """ - self.setExpanded(0) + """ Se charge de remettre les noeuds Expanded dans le meme etat """ + print "*********** build_children ", self.item.GetLabelText() + listeExpanded=[] for item in self.children : + if item.isExpanded(): + if self.children.index(item) < posInsertion : + listeExpanded.append(self.children.index(item)) + else : + listeExpanded.append( self.children.index(item) +1) self.removeChild(item) self.children = [] sublist = self.item._GetSubList() + ind=0 for item in sublist : nouvelItem=item.itemNode(self,item) self.children.append(nouvelItem) - self.setExpanded(1) + if ind in listeExpanded : nouvelItem.setExpanded(1) + ind=ind+1 def affichePanneau(self) : if self.item.isactif(): @@ -192,21 +204,26 @@ class JDCNode(QTreeWidgetItem): Rend le noeud courant (self) selectionne et deselectionne tous les autres """ - self.tree.node_selected.setSelected(0) + for item in self.tree.selectedItems() : + item.setSelected(0) + print "select -----------> " , self.item.GetLabelText() self.setSelected( True ) + self.setExpanded( True ) + self.tree.setCurrentItem( self ) self.tree.node_selected= self #------------------------------------------------------------------ # Methodes de creation et destruction de noeuds # Certaines de ces methodes peuvent etre appelees depuis l'externe #------------------------------------------------------------------ - def append_brother(self,name,pos='after',retour='non'): + def append_brother(self,name,pos='after'): """ Permet d'ajouter un objet frere a l'objet associe au noeud self par defaut on l'ajoute immediatement apres Methode externe """ -### print "*********** append_brother ", self.item.GetLabelText() + print "*********** append_brother ", self.item.GetLabelText() + self.editor.init_modif() index = self.treeParent.children.index(self) if pos == 'before': index = index @@ -217,7 +234,7 @@ class JDCNode(QTreeWidgetItem): return 0 return self.treeParent.append_child(name,pos=index) - def append_child(self,name,pos=None,verif='oui',retour='non'): + def append_child(self,name,pos=None,verif='oui'): """ Methode pour ajouter un objet fils a l'objet associe au noeud self. On peut l'ajouter en debut de liste (pos='first'), en fin (pos='last') @@ -225,6 +242,7 @@ class JDCNode(QTreeWidgetItem): Si pos vaut None, on le place a la position du catalogue. """ print "************** append_child ",self.item.GetLabelText() + self.editor.init_modif() if pos == 'first': index = 0 elif pos == 'last': @@ -242,9 +260,9 @@ class JDCNode(QTreeWidgetItem): obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add' if obj is None:obj=0 if obj == 0:return 0 - self.build_children() + self.build_children(index) child=self.children[index] - child.affichePanneau() + child.affichePanneau() return child def delete(self): @@ -262,7 +280,6 @@ class JDCNode(QTreeWidgetItem): brothers=self.treeParent.children if brothers: toselect=brothers[index] - self.treeParent.setSelected(0) else: toselect=self.treeParent toselect.select() @@ -271,16 +288,27 @@ class JDCNode(QTreeWidgetItem): # # #------------------------------------------------------------------ def onValid(self): + self.editor.init_modif() self.update_node_valid() self.update_node_label() self.update_node_texte() - + + def onAdd(self,object): + #print "NODE onAdd", self.item.GetLabelText() + self.editor.init_modif() + self.update_nodes() + + def onSupp(self,object): + #print "NODE onSupp", self.item.GetLabelText() + self.editor.init_modif() + self.update_nodes() + def update_node_valid(self): """Cette methode remet a jour la validite du noeud (icone) Elle appelle isvalid """ - print 'NODE update_node_valid', self.item.GetLabelText() + #print 'NODE update_node_valid', self.item.GetLabelText() monIcone = QIcon("/home/noyret/Install_Eficas/EficasV1/InterfaceQT4/icons/" +self.item.GetIconName() + ".gif") self.setIcon(0,monIcone) @@ -297,7 +325,8 @@ class JDCNode(QTreeWidgetItem): self.setText(1, value) def update_nodes(self): - self.select() + #print 'NODE update_nodes', self.item.GetLabelText() + self.build_children() def update_texte(self): """ Met a jour les noms des SD et valeurs des mots-cles """ @@ -307,61 +336,34 @@ class JDCNode(QTreeWidgetItem): for child in self.children: if child.isHidden() == false : child.update_texte() - def update_valid(self) : - """Cette methode a pour but de mettre a jour la validite du noeud - et de propager la demande de mise a jour a son Parent - """ - print "NODE update_valid", self.item.GetLabelText() - self.update_node_valid() - try : - self.treeParent.update_valid() - except: - pass - -# def supprime(self): -# #print "NODE supprime",self.item.GetLabelText() -# self.efface_node() -# self.racine = None -# if not self.children : return -# for child in self.children: -# child.supprime() -# self.children=None -# -# def build_children(self): -# """ Construit la liste des enfants de self """ -# #print "NODE : Construit la liste des enfants de", self.item.GetLabelText() -# self.children = [] -# sublist = self.item._GetSubList() -# if sublist : -# last = None -# for item in sublist : -# child = item.itemNode(self, item, last) -# last = child -# self.children.append(child) -# -# -# def doPasteCommande(self,objet_a_copier): -# """ -# Réalise la copie de l'objet passé en argument qui est nécessairement -# une commande -# """ -# QWParent=self.QWParent -# #child = QWParent.item.append_child(objet_a_copier,self.item.getObject()) -# child = self.append_brother(objet_a_copier,retour='oui') -# #if child is None:return 0 -# return child -# -# def doPasteMCF(self,objet_a_copier): +# def update_valid(self) : +# """Cette methode a pour but de mettre a jour la validite du noeud +# et de propager la demande de mise a jour a son Parent # """ -# Réalise la copie de l'objet passé en argument (objet_a_copier) -# Il s'agit forcément d'un mot clé facteur -# """ -# child = self.append_child(objet_a_copier,pos='first',retour='oui') -# return child -# -# -# -# +# #print "NODE update_valid", self.item.GetLabelText() +# self.update_node_valid() +# try : +# self.treeParent.update_valid() +# except: +# pass + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + print "objet_a_copier = ", objet_a_copier.item.GetLabelText() + child = self.append_brother(objet_a_copier) + return child + + def doPasteMCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first') + return child + if __name__=='__main__': from PyQt4 import * from PyQt4.QtGui import * diff --git a/InterfaceQT4/compojdc.py b/InterfaceQT4/compojdc.py index 2c2bd931..b99bf3c5 100644 --- a/InterfaceQT4/compojdc.py +++ b/InterfaceQT4/compojdc.py @@ -9,10 +9,6 @@ class Node(browser.JDCNode): """ """ from monRacinePanel import MonRacinePanel - #return MonRacinePanel(self,parent=self.appliEficas.centralWidget()) - #print self.treeParent.editor - #print dir(self) - return MonRacinePanel(self,parent=self.editor) def doPasteCommande(self,objet_a_copier): diff --git a/InterfaceQT4/compooper.py b/InterfaceQT4/compooper.py index add78867..66bd646f 100644 --- a/InterfaceQT4/compooper.py +++ b/InterfaceQT4/compooper.py @@ -38,7 +38,7 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode): """ parent=self.parent #child = parent.item.append_child(objet_a_copier,self.item.getObject()) - child = self.append_brother(objet_a_copier,retour='oui') + child = self.append_brother(objet_a_copier) #if child is None:return 0 return child diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index 83f6cefc..b0f7f69a 100644 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -49,7 +49,7 @@ class JDCEditor(QSplitter): def __init__ (self,fichier = None, jdc = None, QWParent=None, units = None, include=0 ,appli=None): #----------------------------------------------------------------------------------------------# - print "debut JDCEditor __init__" + #print "debut JDCEditor __init__" QSplitter.__init__(self, QWParent) self.appliEficas = appli self.fichier = fichier @@ -63,10 +63,10 @@ class JDCEditor(QSplitter): else : self.salome=0 - self.top = None self.code = prefs.code self.version_code = VERSION_CODE self.titre=VERSION_EFICAS + ' pour '+ self.code + self.dict_reels={} self.liste_simp_reel=[] self.format_fichier='python' # par defaut @@ -85,10 +85,10 @@ class JDCEditor(QSplitter): self.fileInfo = None self.lastModified = 0 - self.panel_courant=None - self.node_selected = None self.modified = False self.isReadOnly = False + self.tree = None + self.node_selected = None if not hasattr( readercata, 'reader' ) : readercata.reader = readercata.READERCATA( self, self.appliEficas ) @@ -102,26 +102,10 @@ class JDCEditor(QSplitter): if self.fichier is not None: # fichier jdc fourni self.fileInfo = QFileInfo(self.fichier) self.fileInfo.setCaching(0) - #if editor is None: self.jdc = self.readFile(self.fichier) - print self.jdc if units is not None: self.jdc.recorded_units=units self.jdc.old_recorded_units=units - #else: - # self.top = editor.top - # self.code = editor.code - # self.version_code = editor.version_code - # self.titre = editor.titre - # self.dict_reels = editor.dict_reels - # self.liste_simp_reel= editor.liste_simp_reel - # self.format_fichier = editor.format_fichier - # self.CONFIGURATION = editor.CONFIGURATION - # self.CONFIGStyle = editor.CONFIGStyle - # self.jdc = editor.jdc - # self.lastModified = self.fileInfo.lastModified() -# elif editor is not None: -# self.jdc = editor.jdc else: if not self.jdc: # nouveau jdc if not include : @@ -139,7 +123,7 @@ class JDCEditor(QSplitter): if txt_exception: self.jdc = None qApp.restoreOverrideCursor() - self.affiche_infos("Erreur fatale au chargement de %s" %fn) + self.affiche_infos("Erreur fatale au chargement de %s" %fichier) QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception) else: comploader.charger_composants("QT") @@ -147,63 +131,9 @@ class JDCEditor(QSplitter): if (not self.jdc.isvalid()) and (not nouveau) : self.viewJdcRapport() -# -# #------- config widget -------------- -# if jdc_item: self.tree = browser.JDCTree( jdc_item, self ) -# self.connect(self.tree,SIGNAL('selectionChanged(QListViewItem *)'),self.updatePanel) -# -# sh = self.sizeHint() -# if sh.height() < 300: -# sh.setHeight(300) -# self.resize(sh) -# -# # Make sure tabbing through a QWorkspace works. -# #self.setFocusPolicy(QWidget.StrongFocus) -# self.setFocusPolicy(Qt.StrongFocus) -# self._updateReadOnly(1) -# -# # Set the editors size if it is too big for the QWParent. -# if QWParent is not None: -# req = self.size() -# bnd = req.boundedTo(QWParent.size()) -# -# if bnd.width() < req.width() or bnd.height() < req.height(): -# self.resize(bnd) -# -# self.panel = QWidget(self) -# print "fin JDCEditor __init__" -# #self.connect(self, SIGNAL('modificationChanged(bool)'), self.handleModificationChanged) -# -# -# #-------------------------------------------------------------------# -# def _updateReadOnly(self, bForce=1): -# #-------------------------------------------------------------------# -# """ -# Private method to update the readOnly information for this editor. -# -# If bForce is True, then updates everything regardless if -# the attributes have actually changed, such as during -# initialization time. A signal is emitted after the -# caption change. -# -# @param bForce 1 to force change, 0 to only update and emit -# signal if there was an attribute change. -# """ -# -# if self.fichier is None: -# return -# readOnly = not QFileInfo(self.fichier).isWritable() and 1 or 0 -# if not bForce and (readOnly == self.isReadOnly): -# return -# cap = self.fichier -# if readOnly: -# cap = "%s (ro)" % unicode(cap) -# self.isReadOnly = readOnly -# #self.setCaption(cap) -# #self.emit(PYSIGNAL('captionChanged'), (cap, self)) -# + #--------------------------------# def _newJDC( self ,units = None): #--------------------------------# @@ -254,64 +184,6 @@ class JDCEditor(QSplitter): J.old_recorded_units=units return J -# -# #-----------------------# -# def get_source(self,file): -# #-----------------------# -# import convert -# format=self.format_fichier -# -# # Il faut convertir le contenu du fichier en fonction du format -# if convert.plugins.has_key(format): -# # Le convertisseur existe on l'utilise -# p=convert.plugins[format]() -# p.readfile(file) -# text=p.convert('execnoparseur') -# if not p.cr.estvide(): -# self.affiche_infos("Erreur a la conversion") -# return text -# else: -# # Il n'existe pas c'est une erreur -# self.affiche_infos("Type de fichier non reconnu") -# QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") -# return None -# -# #---------------------------------------------# -# def get_file(self,unite=None,fic_origine = ''): -# #---------------------------------------------# -# ulfile = None -# jdcText = "" -# -# titre = "" -# -# if unite : -# titre = "Choix unite %d " %unite -# texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine -# texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite -# labeltexte = 'Fichier pour unite %d :' % unite -# else: -# titre = "Choix d'un fichier de poursuite" -# texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') -# texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' -# -# QMessageBox.information( self, titre,texte) -# fn = QFileDialog.getOpenFileName( None, "", self, None, titre ) -# -# if fn.isNull(): -# return -# -# ulfile = os.path.abspath(unicode(fn)) -# # On utilise le convertisseur défini par format_fichier -# source=self.get_source(ulfile) -# if source: -# # On a réussi à convertir le fichier self.ulfile -# jdcText = source -# else: -# # Une erreur a été rencontrée -# jdcText = '' -# return ulfile, jdcText -# -# #-----------------------# def readFile(self, fn): #-----------------------# @@ -321,7 +193,6 @@ class JDCEditor(QSplitter): @param fn filename to read from (string or QString) """ fn = unicode(fn) -# qApp.setOverrideCursor(Qt.WaitCursor) # ------------------------------------------------------------------------------------ # charge le JDC @@ -332,7 +203,6 @@ class JDCEditor(QSplitter): if convert.plugins.has_key( self.format_fichier ): # Le convertisseur existe on l'utilise appli = self -# CS_pbruno compatiblity parseur_python: self.appli.liste_simp_reel, self.appli.dict_reels p=convert.plugins[self.format_fichier]() p.readfile(fn) text=p.convert('exec',appli) @@ -390,217 +260,160 @@ class JDCEditor(QSplitter): strRapport = str( self.jdc.report() ) self._viewText(strRapport, "JDC_RAPPORT") -# #-----------------------# -# def handleRenamed(self, fn): -# #-----------------------# -# """ -# Public slot to handle the editorRenamed signal. -# -# @param fn filename to be set for the editor (QString or string). -# """ -# self.fichier = unicode(fn) -# self.setCaption(self.fichier) -# -# if self.fileInfo is None: -# self.fileInfo = QFileInfo(self.fichier) -# self.fileInfo.setCaching(0) -# -# self.lastModified = self.fileInfo.lastModified() -# self.vm.setEditorName(self, self.fichier) -# self._updateReadOnly(1) -# -# #-----------------------# -# def handleNewView(self): -# #-----------------------# -# """ -# Private slot to create a new view to an open document. -# """ -# self.vm.newEditorView(self.fichier, self)#, self.isPythonFile) -# -# #------------------------------------# -# def handleModificationChanged(self, m): -# #------------------------------------# -# """ -# Private slot to handle the modificationChanged signal. -# -# It emits the signal modificationStatusChanged with parameters -# m and self. -# -# @param m modification status -# """ -# if not m and self.fileInfo is not None: -# self.lastModified = self.fileInfo.lastModified() -# self.emit(PYSIGNAL('modificationStatusChanged'), (m, self)) -# -# #------------------------# -# def hasSyntaxErrors(self): -# #------------------------# -# return False #CS_pbruno todo -# #----------------# def closeIt(self): #----------------# """ Public method called by the viewmanager to finally get rid of us. """ - if self.jdc: self.jdc.supprime() self.close() -# -# + #------------------------------# def affiche_infos(self,message): #------------------------------# if self.sb: self.sb.showMessage(message)#,2000) -# #------------------------------# -# def updatePanel(self, jdcNode): -# #------------------------------# -# """ -# Appele a chaque changement de noeud -# """ -# self.node_selected = jdcNode -# if self.panel: -# self.panel.close() -# del self.panel -# self.panel = None -# -# if jdcNode.item.isactif(): -# self.panel = jdcNode.getPanel() -# else: -# self.panel = panelsQT.PanelInactif(self.node_selected,self) -# -# if not self.panel: -# self.panel = panelsQT.NoPanel(self) -# -# self.panel.show() -# -# #-------------------# def init_modif(self): #-------------------# """ - Met l'attribut modified a 'o' : utilise par Eficas pour savoir + Met l'attribut modified a 'o' : utilise par Eficas pour savoir si un JDC doit etre sauvegarde avant destruction ou non """ self.modified = True - #self.emit(PYSIGNAL('modificationStatusChanged'), (True, self)) - self.emit(SIGNAL('modificationStatusChanged'), (True, self)) -# -# #-------------------# -# def stop_modif(self): -# #-------------------# -# """ -# Met l'attribut modified à 'n' : utilisé par Eficas pour savoir -# si un JDC doit etre sauvegardé avant destruction ou non -# """ -# self.modified = False -# self.emit(PYSIGNAL('modificationStatusChanged'), (False, self)) -# -# -# #-------------------# -# def cut(self): -# #-------------------# -# """ -# Stocke dans Eficas.noeud_a_editer le noeud à couper -# """ -# if not self.node_selected.item.iscopiable(): -# QMessageBox.information( self, "Copie impossible", -# "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur") -# return -# self.QWParent.edit="couper" -# self.QWParent.noeud_a_editer = self.node_selected -# -# #-------------------# -# def copy(self): -# #-------------------# -# """ -# Stocke dans Eficas.noeud_a_editer le noeud a copier -# """ -# if not self.node_selected.item.iscopiable(): -# QMessageBox.information( self, "Copie impossible", -# "La copie d'un tel objet n'est pas permise") -# return -# self.QWParent.edit="copier" -# self.QWParent.noeud_a_editer = self.node_selected -# -# #-------------------# -# def paste(self): -# #-------------------# -# """ -# Lance la copie de l'objet place dans self.QWParent.noeud_a_editer -# Ne permet que la copie d'objets de type Commande ou MCF -# """ -# try: -# child=self.QWParent.noeud_a_editer.doPaste(self.node_selected) -# except: -# traceback.print_exc() -# QMessageBox.information( self, "Copie impossible", -# "L'action de coller apres un tel objet n'est pas permise") -# return -# -# if child == 0: -# if self.message != '': -# QMessageBox.critical( self, "Copie refusee", self.message) -# self.message = '' -# self.affiche_infos("Copie refusée") -# return -# -# # il faut declarer le JDCDisplay_courant modifie -# self.init_modif() -# # suppression eventuelle du noeud selectionne -# # si possible on renomme l objet comme le noeud couper -# -# if self.QWParent.edit == "couper": -# #nom = self.QWParent.noeud_a_editer.item.object.sd.nom -# item=self.QWParent.noeud_a_editer.item -# self.QWParent.noeud_a_editer.delete() -# child.item.update(item) -# #test,mess = child.item.nomme_sd(nom) -# child.select() -# -# # on rend la copie a nouveau possible en liberant le flag edit -# self.QWParent.edit="copier" -# + + #---------------------------------------# + def chercheNoeudSelectionne(self,copie=1): + #---------------------------------------# + """ + appele par Cut et Copy pour positionner self.node_selected + """ + self.node_selected=None + if len(self.tree.selectedItems()) == 0 : return + if len(self.tree.selectedItems()) != 1 : + QMessageBox.information( self, + "Copie impossible", + "Cette version d'EFICAS permet uniquement la copie d un seul objet") + return + self.node_selected=self.tree.selectedItems()[0] + if copie == 0 : return + if not self.node_selected.item.iscopiable(): + QMessageBox.information( self, + "Copie impossible", + "Cette version d'EFICAS ne permet pas la copie de cet Objet") + self.node_selected=None + return + + + #---------------------# + def handleEditCut(self): + #---------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud à couper + """ + self.chercheNoeudSelectionne() + self.QWParent.edit="couper" + self.QWParent.noeud_a_editer = self.node_selected + + #-----------------------# + def handleEditCopy(self): + #-----------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud a copier + """ + self.chercheNoeudSelectionne() + self.QWParent.edit="copier" + self.QWParent.noeud_a_editer = self.node_selected + + #------------------------# + def handleEditPaste(self): + #------------------------# + """ + Lance la copie de l'objet place dans self.QWParent.noeud_a_editer + Ne permet que la copie d'objets de type Commande ou MCF + """ + self.chercheNoeudSelectionne() + print "noeud a copier", self.node_selected.item.GetLabelText()[0] + print "noued apres " ,self.QWParent.noeud_a_editer.item.GetLabelText()[0] + if self.QWParent.noeud_a_editer == None : + QMessageBox.information( self, + "Copie impossible", + "Aucun Objet n a ete copie ou colle ") + return + try: + child=self.QWParent.noeud_a_editer.doPaste(self.node_selected) + except: + traceback.print_exc() + QMessageBox.information( self, + "Copie impossible", + "L'action de coller apres un tel objet n'est pas permise") + return + + + if child == 0: + if self.message != '': + QMessageBox.critical( self, "Copie refusee", self.message) + self.message = '' + self.affiche_infos("Copie refusée") + return + + # il faut declarer le JDCDisplay_courant modifie + self.init_modif() + # suppression eventuelle du noeud selectionne + # si possible on renomme l objet comme le noeud couper + + if self.QWParent.edit == "couper": + #nom = self.QWParent.noeud_a_editer.item.object.sd.nom + print self.QWParent.noeud_a_editer.item.object.sd.nom + item=self.QWParent.noeud_a_editer.item + self.QWParent.noeud_a_editer.delete() + child.item.update(item) + #test,mess = child.item.nomme_sd(nom) + child.select() + + # on rend la copie a nouveau possible en liberant le flag edit + self.QWParent.edit="copier" + #---------------------# def getFileName(self): #---------------------# return self.fichier -# -# #---------------------------# -# def writeFile(self, fn, txt = None): -# #------------------------------# -# """ -# Public slot to write the text to a file. -# -# @param fn filename to write to (string or QString) -# @return flag indicating success -# """ -# -# fn = unicode(fn) -# -# if txt == None : -# txt = self.get_text_JDC(self.format_fichier) -# eol = '\n' -# if len(txt) >= len(eol): -# if txt[-len(eol):] != eol: -# txt += eol -# else: -# txt += eol -# -# try: -# f = open(fn, 'wb') -# f.write(txt) -# f.close() -# return 1 -# except IOError, why: -# QMessageBox.critical(self, self.trUtf8('Save File'), -# self.trUtf8('The file %1 could not be saved.
Reason: %2') -# .arg(unicode(fn)).arg(str(why))) -# return 0 -# + + #---------------------------# + def writeFile(self, fn, txt = None): + #------------------------------# + """ + Public slot to write the text to a file. + + @param fn filename to write to (string or QString) + @return flag indicating success + """ + + fn = unicode(fn) + + if txt == None : + txt = self.get_text_JDC(self.format_fichier) + eol = '\n' + if len(txt) >= len(eol): + if txt[-len(eol):] != eol: + txt += eol + else: + txt += eol + + try: + f = open(fn, 'wb') + f.write(txt) + f.close() + return 1 + except IOError, why: + QMessageBox.critical(self, self.trUtf8('Save File'), + self.trUtf8('The file %1 could not be saved.
Reason: %2') + .arg(unicode(fn)).arg(str(why))) + return 0 + # #------------------------------------ # def writeFilesOpenturns(self,fn) : # #------------------------------------ @@ -632,69 +445,62 @@ class JDCEditor(QSplitter): self.affiche_infos("Format %s non reconnu" % format) QMessageBox.critical( self, "Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format) return -# -# -# #-------------------------------------------# -# def saveFile(self, saveas = 0, path = None): -# #-------------------------------------------# -# """ -# Public slot to save the text to a file. -# -# @param saveas flag indicating a 'save as' action -# @param path directory to save the file in (string or QString) -# @return tuple of two values (boolean, string) giving a success indicator and -# the name of the saved file -# """ -# self.modified = True #CS_pbruno test -# -# if not saveas and not self.modified:#self.isModified(): -# return (0, None) # do nothing if text wasn't changed -# -# newName = None -# if saveas or self.fichier is None: -# if path is None and self.fichier is not None: -# path = os.path.dirname(unicode(self.fichier)) -# selectedFilter = QString('') -# fn = QFileDialog.getSaveFileName(path, -# self.trUtf8("JDC (*.comm);;" -# "All Files (*)"), self, None, -# self.trUtf8("Save File"), selectedFilter, 0) -# -# if not fn.isNull(): -# ext = QFileInfo(fn).extension() -# if ext.isEmpty(): -# ex = selectedFilter.section('(*',1,1).section(')',0,0) -# if not ex.isEmpty(): -# fn.append(ex) -# if QFileInfo(fn).exists(): -# abort = QMessageBox.warning(self, -# self.trUtf8("Save File"), -# self.trUtf8("The file %1 already exists.") -# .arg(fn), -# self.trUtf8("&Overwrite"), -# self.trUtf8("&Abort"), None, 1) -# if abort: -# return (0, None) -# fn = unicode(QDir.convertSeparators(fn)) -# newName = fn -# else: -# return (0, None) -# else: -# fn = self.fichier -# -# if self.writeFile(fn): -# self.fichier = fn -# self.modified = False -# self.setCaption(self.fichier) -# if self.fileInfo is None or saveas: -# self.fileInfo = QFileInfo(self.fichier) -# self.fileInfo.setCaching(0) -# self.emit(PYSIGNAL('editorRenamed'), (self.fichier,)) -# self.lastModified = self.fileInfo.lastModified() -# if newName is not None: -# self.vm.addToRecentList(newName) -# self.emit(PYSIGNAL('editorSaved'), (self.fichier,)) -# self.stop_modif() + + + #-----------------------------------------# + def saveFile(self, path = None, saveas= 0): + #-----------------------------------------# + """ + Public slot to save the text to a file. + + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + + if not self.modified and not saveas: + return (0, None) # do nothing if text wasn't changed + + newName = None + if self.fichier is None or saveas: + if path is None: + #PN --> modifier selon les prefs + path="/tmp" + selectedFilter = QString('') + fn = QFileDialog.getSaveFileName( self, + self.trUtf8("sauvegarde"), path, + self.trUtf8("JDC (*.comm);;" "All Files (*)"),None, + QFileDialog.DontConfirmOverwrite) + if fn.isNull(): return (0, None) + + ext = QFileInfo(fn).suffix() + if ext.isEmpty(): fn.append(".comm") + + if QFileInfo(fn).exists(): + abort = QMessageBox.warning(self, + self.trUtf8("Sauvegarde du Fichier"), + self.trUtf8("Le fichier %1 existe deja.").arg(fn), + self.trUtf8("&Ecraser"), + self.trUtf8("&Abandonner")) + if abort == 1 : return (0, None) + + fn = unicode(QDir.convertSeparators(fn)) + newName = fn + + else: + fn = self.fichier + + if self.writeFile(fn): + self.fichier = fn + self.modified = False + if self.fileInfo is None or saveas: + self.fileInfo = QFileInfo(self.fichier) + self.fileInfo.setCaching(0) + self.lastModified = self.fileInfo.lastModified() + if newName is not None: + self.appliEficas.addToRecentList(newName) + self.tree.racine.item.getObject().nom=os.path.basename(newName) + self.tree.racine.update_node_label() # if self.code == "OPENTURNS" : # self.writeFilesOpenturns(fn) # if self.salome : @@ -703,33 +509,32 @@ class JDCEditor(QSplitter): # self.QWParent.appli.createOrUpdateMesh(self) # #PN ; TODO # + return (1, self.fichier) + else: + return (0, None) # -# return (1, self.fichier) -# else: -# return (0, None) -# -# #---------------------------------# -# def saveFileAs(self, path = None): -# #---------------------------------# -# """ -# Public slot to save a file with a new name. -# -# @param path directory to save the file in (string or QString) -# @return tuple of two values (boolean, string) giving a success indicator and -# the name of the saved file -# """ -# return self.saveFile(1, path) -# -# -#if __name__=='__main__': -# if hasattr(prefs,'encoding'): -# # Hack pour changer le codage par defaut des strings -# import sys -# reload(sys) -# sys.setdefaultencoding(prefs.encoding) -# del sys.setdefaultencoding -# # Fin hack -# + #---------------------------------# + def saveFileAs(self, path = None): + #---------------------------------# + """ + Public slot to save a file with a new name. + + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + return self.saveFile(path,1) + + +if __name__=='__main__': + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + # #CS_pbruno note: fait implicitement des trucs ces imports (grr) # import styles # import import_code @@ -739,12 +544,11 @@ class JDCEditor(QSplitter): # options=session.parse(sys.argv) # code=options.code # -# app = QApplication(sys.argv) -# mw = JDCEditor('azAster.comm') -# app.setMainWidget(mw) -# app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) -# mw.show() -# -# res = app.exec_loop() -# sys.exit(res) -# + app = QApplication(sys.argv) + mw = JDCEditor('azAster.comm') + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + + res = app.exec_loop() + sys.exit(res) diff --git a/InterfaceQT4/monFonctionPanel.py b/InterfaceQT4/monFonctionPanel.py index 0a42222b..152a71ef 100644 --- a/InterfaceQT4/monFonctionPanel.py +++ b/InterfaceQT4/monFonctionPanel.py @@ -68,7 +68,11 @@ class MonFonctionPanel(MonPlusieursBasePanel): self.LBValeurs.clear() listeValeurs=self.node.item.GetListeValeurs() for valeur in self.DecoupeListeValeurs(listeValeurs): - self.LBValeurs.addItem(str(valeur)) + if (self.nbValeurs==2): + str_valeur=str(valeur[0])+","+str(valeur[1]) + else: + str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2]) + self.LBValeurs.addItem(str_valeur) def Ajout1Valeur(self,liste=[]): # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur) @@ -84,15 +88,17 @@ class MonFonctionPanel(MonPlusieursBasePanel): commentaire += QString(" n est pas un tuple de ") commentaire += QString(str(self.nbValeurs)) commentaire += QString(" valeurs") - #self.Commentaire.setText(commentaire) self.LEValeur.setText(QString(str(liste))) self.editor.affiche_infos(commentaire) return - index=self.LBValeurs.currentItem() +1 + index=self.LBValeurs.currentRow() + if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )): + index=0 + else : + index=self.LBValeurs.currentRow() + 1 indexListe=index*self.nbValeurs if index == 0 : - index = -1 indexListe=len(self.listeValeursCourantes) listeVal=[] for valeur in self.listeValeursCourantes : @@ -105,8 +111,15 @@ class MonFonctionPanel(MonPlusieursBasePanel): self.LEValeur.setText(QString("")) l1=self.listeValeursCourantes[:indexListe] l3=self.listeValeursCourantes[indexListe:] - for valeur in self.DecoupeListeValeurs(listeRetour): - self.LBValeurs.insertItem(QString(str(valeur)),index) + for valeur in self.DecoupeListeValeurs(listeRetour) : + if (self.nbValeurs==2): + str_valeur=str(valeur[0])+","+str(valeur[1]) + else: + str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2]) + self.LBValeurs.insertItem(index,str_valeur) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) index=index+1 self.listeValeursCourantes=l1+listeRetour+l3 @@ -123,8 +136,9 @@ class MonFonctionPanel(MonPlusieursBasePanel): def Sup1Valeur(self): - index=self.LBValeurs.currentItem() - self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + index=self.LBValeurs.currentRow() + if index == None : return + self.LBValeurs.takeItem(index) listeVal=[] i=0 for valeur in self.listeValeursCourantes : @@ -137,7 +151,4 @@ class MonFonctionPanel(MonPlusieursBasePanel): i = i+1 self.listeValeursCourantes=listeVal listeValeurs=self.listeValeursCourantes - self.LBValeurs.clear() - for valeur in self.DecoupeListeValeurs(listeValeurs): - self.LBValeurs.insertItem(str(valeur)) diff --git a/InterfaceQT4/monIncludePanel.py b/InterfaceQT4/monIncludePanel.py index 054a757d..e3ca66dd 100644 --- a/InterfaceQT4/monIncludePanel.py +++ b/InterfaceQT4/monIncludePanel.py @@ -22,74 +22,89 @@ # Modules Eficas import os,traceback,sys -#from PyQt4 import * +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 from PyQt4.QtGui import * -#from monMacroPanel import DMacro +from PyQt4.QtCore import * -from monMacroPanel import MonMacroPanel +from desInclude import Ui_DInc1 import convert +class DInc(Ui_DInc1,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + # Import des panels -class MonIncludePanel(MonMacroPanel): +class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): """ Classe définissant le panel associé aux mots-clés qui demandent à l'utilisateur de choisir une seule valeur parmi une liste de valeurs discrètes """ def __init__(self,node, parent = None,name = None,fl = 0): - MonMacroPanel.__init__(self,node,parent,name,fl) + DInc.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + self.connecterSignaux() + + self.node=node #Version TK ?? #if not hasattr(self.node.item.object,'fichier_ini'): if not hasattr(self.node.item.object,'fichier_unite'): - self.ajoutPageBad() + self.pageBad() else: - self.ajoutPageOk() - - def ajoutPageOk(self): - self.TabPage = QWidget(self.TWChoix) - self.TabPage.setObjectName("TabPage") - self.LENomFichier = QLineEdit(self.TabPage,"LENomFichier") - self.LENomFichier.setGeometry(QRect(18,127,450,30)) - self.textLabel1_3 = QLabel(self.TabPage,"textLabel1_3") - self.textLabel1_3.setGeometry(QRect(70,50,350,41)) - self.BBrowse = QPushButton(self.TabPage,"BBrowse") - self.BBrowse.setGeometry(QRect(288,306,161,41)) - self.TWChoix.insertTab(self.TabPage,QString("")) - self.textLabel1_3.setText(self._DMacro__tr("La commande INCLUDE requiert un nom de Fichier :")) - self.BBrowse.setText(self._DMacro__tr("Edit")) - self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Include")) - self.TWChoix.setCurrentPage(2) - if hasattr(self.node.item.object,'fichier_ini'): - self.LENomFichier.setText(self.node.item.object.fichier_ini) - else : - self.LENomFichier.setText("") - self.LENomFichier.setText(self.node.item.object.fichier_ini) - - - self.BChangeFile = QPushButton(self.TabPage,"BChangeFile") - self.BChangeFile.setGeometry(QRect(290,350,161,41)) - self.BChangeFile.setSizePolicy(QSizePolicy(0,0,0,0,self.BChangeFile.sizePolicy().hasHeightForWidth())) - self.BChangeFile.setText(self._DMacro__tr("Autre Fichier")) - - self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) - self.connect(self.BChangeFile,SIGNAL("clicked()"),self.BChangeFilePressed) - self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) - - - def ajoutPageBad(self) : - self.TabPage = QWidget(self.TWChoix) - self.textLabel1_5 = QLabel(self.TabPage,"textLabel1_5") - TabPageLayout = QGridLayout(self.TabPage,1,1,11,6,"TabPageLayout") - TabPageLayout.addWidget(self.textLabel1_5,0,0) - self.TWChoix.insertTab(self.TabPage,QString("")) - self.resize(QSize(521,499).expandedTo(self.minimumSizeHint())) - self.clearWState(Qt.WState_Polished) - self.textLabel1_5.setText(self._DMacro__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x49\x4e\x43\x4c\x55\x44\x45\x20\x6e\x27\x61\x20\x70\x61\x73\x20\x64\x65\x20\x66\x69\x63\x68\x69\x65\x72\x20\x61\x73\x73\x6f\x63\x69\xc3\xa9\x2e\x0a\x49\x6c\x20\x66\x61\x75\x74\x20\x64\x27\x61\x62\x6f\x72\x64\x20\x63\x68\x6f\x69\x73\x69\x72\x20\x75\x6e\x20\x6e\x75\x6d\xc3\xa9\x72\x6f\x20\x64\x27\x75\x6e\x69\x74\xc3\xa9\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) - self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Include")) - self.TWChoix.setCurrentPage(2) - + self.pageOk() + + def pageOk(self): + self.TWChoix.removeTab(2) + #self.TWChoix = QWidget(self.TWChoix) + #self.TWChoix.setObjectName("TWChoix") + #self.LENomFichier = QLineEdit(self.TWChoix,"LENomFichier") + #self.LENomFichier.setGeometry(QRect(18,127,450,30)) + #self.textLabel1_3 = QLabel(self.TWChoix,"textLabel1_3") + #self.textLabel1_3.setGeometry(QRect(70,50,350,41)) + #self.BBrowse = QPushButton(self.TWChoix,"BBrowse") + #self.BBrowse.setGeometry(QRect(288,306,161,41)) + #self.TWChoix.insertTab(self.TWChoix,QString("")) + #self.textLabel1_3.setText(self._DMacro__tr("La commande INCLUDE requiert un nom de Fichier :")) + #self.BBrowse.setText(self._DMacro__tr("Edit")) + #self.TWChoix.changeTab(self.TWChoix,self._DMacro__tr("Fichier Include")) + #self.TWChoix.setCurrentPage(2) + #if hasattr(self.node.item.object,'fichier_ini'): + # self.LENomFichier.setText(self.node.item.object.fichier_ini) + #else : + # self.LENomFichier.setText("") + #self.LENomFichier.setText(self.node.item.object.fichier_ini) + + + #self.BChangeFile = QPushButton(self.TWChoix,"BChangeFile") + #self.BChangeFile.setGeometry(QRect(290,350,161,41)) + #self.BChangeFile.setSizePolicy(QSizePolicy(0,0,0,0,self.BChangeFile.sizePolicy().hasHeightForWidth())) + #self.BChangeFile.setText(self._DMacro__tr("Autre Fichier")) + + + + def pageBad(self) : + self.TWChoix.removeTab(2) + self.TWChoix.setCurrentIndex(2) def BBrowsePressed(self): self.node.makeEdit() @@ -154,3 +169,48 @@ class MonIncludePanel(MonMacroPanel): fn = os.path.abspath((unicode(fn))) self.LENomFichier.setText(fn) self.LENomFichReturnPressed() + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + try : + self.connect(self.BChangeFile,SIGNAL("clicked()"),self.BChangeFilePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + except : + pass + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) + diff --git a/InterfaceQT4/monListeParamPanel.py b/InterfaceQT4/monListeParamPanel.py index dedea6bf..91d5221c 100644 --- a/InterfaceQT4/monListeParamPanel.py +++ b/InterfaceQT4/monListeParamPanel.py @@ -29,17 +29,17 @@ from PyQt4.QtCore import * class DLisParam(Ui_DLisParam,QDialog): def __init__(self,parent ,modal ) : QDialog.__init__(self,parent) - if hasattr(parent,"leLayout"): - parent.leLayout.removeWidget(parent.leLayout.widgetActive) - parent.leLayout.widgetActive.close() - parent.leLayout.addWidget(self) - parent.leLayout.widgetActive=self - else: - parent.partieDroite=QWidget() - parent.leLayout=QGridLayout(parent.partieDroite) - parent.leLayout.addWidget(self) - parent.addWidget(parent.partieDroite) - parent.leLayout.widgetActive=self + #if hasattr(parent,"leLayout"): + # parent.leLayout.removeWidget(parent.leLayout.widgetActive) + # parent.leLayout.widgetActive.close() + # parent.leLayout.addWidget(self) + # parent.leLayout.widgetActive=self + #else: + # parent.partieDroite=QWidget() + # parent.leLayout=QGridLayout(parent.partieDroite) + # parent.leLayout.addWidget(self) + # parent.addWidget(parent.partieDroite) + # parent.leLayout.widgetActive=self self.setupUi(self) class MonListeParamPanel(DLisParam): diff --git a/InterfaceQT4/monParamPanel.py b/InterfaceQT4/monParamPanel.py index 4d385f4e..8b8474c2 100644 --- a/InterfaceQT4/monParamPanel.py +++ b/InterfaceQT4/monParamPanel.py @@ -84,9 +84,10 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel): def BOkParamPressed(self): val=self.LEValeurPressed() - nom=self.LENomPressed() + nom,commentaire=self.LENomPressed() if not nom : - commentaire="Entrer un nom de parametre" + if commentaire == None : + commentaire="Entrer un nom de parametre" self.Commentaire.setText(QString(commentaire)) self.editor.affiche_infos(commentaire) return @@ -136,14 +137,12 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel): self.Commentaire.setText(QString("")) qtNom=self.lineEditNom.text() nom=str(qtNom) - numDebutPattern=re.compile('[a-zA-Z]') + numDebutPattern=re.compile('[a-zA-Z"_"]') if numDebutPattern.match(nom) : - return nom + return nom,None else : - commentaire="Les noms de parametre doivent commencer par une lettre" - self.Commentaire.setText(QString(commentaire)) - self.editor.affiche_infos(commentaire) - return None + commentaire="Les noms de parametre doivent commencer par une lettre ou un souligne" + return None,commentaire def BuildTabCommand(self): QTPanelTBW2.BuildLBNouvCommande(self) diff --git a/InterfaceQT4/monPlusieursASSDPanel.py b/InterfaceQT4/monPlusieursASSDPanel.py index c01c8600..60568ff3 100644 --- a/InterfaceQT4/monPlusieursASSDPanel.py +++ b/InterfaceQT4/monPlusieursASSDPanel.py @@ -26,6 +26,7 @@ import prefs from PyQt4 import * from PyQt4.QtGui import * +from PyQt4.QtCore import * from monPlusieursIntoPanel import MonPlusieursIntoPanel from monPlusieursIntoPanel import DPlusInto from qtCommun import QTPanel @@ -48,8 +49,7 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel): self.DisplayListBoxPossibles() self.politique=PolitiquePlusieurs(node,parent) - #QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.Ajout1Valeur ) - # QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD ) + self.connecterSignaux() def DisplayListBoxPossibles(self): listeNomsSD = self.node.item.get_sd_avant_du_bon_type() @@ -81,12 +81,16 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel): QTPanel.BSupPressed(self) def Sup1Valeur(self): - index=self.LBValeurs.currentItem() - self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + indexCourant=self.LBValeurs.currentRow() + if indexCourant < 0 : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant))== 0 : return + if self.LBValeurs.item(indexCourant).text()==QString("") : return + self.LBValeurs.takeItem(indexCourant) + listeVal=[] i=0 for valeur in self.listeValeursCourantes : - if i != index : listeVal.append(valeur) + if i != indexCourant : listeVal.append(valeur) i = i+1 self.listeValeursCourantes=listeVal self.InitValeursCourantes() @@ -95,14 +99,20 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel): def Ajout1Valeur(self): liste=[] - if self.listBoxVal.currentText().latin1() == None : return - liste.append(self.listBoxVal.currentText().latin1()) - index=self.LBValeurs.currentItem() + 1 - if index==0 : index = -1 + indexCourant=self.listBoxVal.currentRow() + if indexCourant == None : return + if self.listBoxVal.isItemSelected(self.listBoxVal.item(indexCourant))== 0 : return + if self.listBoxVal.item(indexCourant).text()==QString("") : return + liste.append(str(self.listBoxVal.item(indexCourant).text())) + if self.LBValeurs.currentItem() != None : + index= self.LBValeurs.currentRow()+ 1 + else : + index = 0 + listeVal=[] for valeur in self.listeValeursCourantes : - valeurSD,validite=self.node.item.eval_valeur(valeur) - if validite : listeVal.append(valeur) + valeurSD,validite=self.node.item.eval_valeur(valeur) + if validite : listeVal.append(valeur) validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) self.Commentaire.setText(comm2) if not validite : @@ -111,7 +121,10 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel): l1=self.listeValeursCourantes[:index] l3=self.listeValeursCourantes[index:] for valeur in listeRetour: - self.LBValeurs.addItem(QString(str(valeur)),index) + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) index=index+1 self.listeValeursCourantes=l1+listeRetour+l3 self.InitValeursCourantes() diff --git a/InterfaceQT4/monPlusieursBasePanel.py b/InterfaceQT4/monPlusieursBasePanel.py index 90ae990e..fcc35bcf 100644 --- a/InterfaceQT4/monPlusieursBasePanel.py +++ b/InterfaceQT4/monPlusieursBasePanel.py @@ -80,7 +80,7 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): mc = self.node.item.get_definition() type = mc.type[0] print self.editor.salome - if not('grma' in repr(type)) or not(self.editor.salome) : + if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) : self.BSalome.close() self.BView2D.close() @@ -92,6 +92,7 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): SaisieValeur.BuildLBValeurs(self) def BOkPourListePressed(self): + self.editor.init_modif() if self.listeValeursCourantes == [] : self.editor.affiche_infos("Pas de validation d un groupe vide") return @@ -108,9 +109,11 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): self.Ajout1Valeur() def Sup1Valeur(self): - index=self.LBValeurs.currentItem() - self.LEValeur.setText(self.LBValeurs.currentText()) - self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + index=self.LBValeurs.currentRow() + if index < 0 : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(index)) == 0 : return + self.LEValeur.setText(self.LBValeurs.item(index).text()) + self.LBValeurs.takeItem(index) listeVal=[] i=0 for valeur in self.listeValeursCourantes : @@ -124,7 +127,13 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): if validite == 0 : return if liste ==[] : return - index=self.LBValeurs.currentItem() + 1 + indexCourant=self.LBValeurs.currentRow() + if ( (self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant )) == 0) + and (indexCourant > 0 )): + index=0 + else : + index=self.LBValeurs.currentRow() + 1 + listeVal=[] for valeur in self.listeValeursCourantes : listeVal.append(valeur) @@ -137,9 +146,13 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): l1=self.listeValeursCourantes[:index] l3=self.listeValeursCourantes[index:] for valeur in listeRetour: - self.LBValeurs.insertItem(QString(str(valeur)),index) + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) index=index+1 self.listeValeursCourantes=l1+listeRetour+l3 + self.editor.affiche_infos("Valeurs Ajoutées") def BImportPressed(self): init=QString( self.editor.CONFIGURATION.rep_user) diff --git a/InterfaceQT4/monPlusieursIntoPanel.py b/InterfaceQT4/monPlusieursIntoPanel.py index ced52dc0..9470e409 100644 --- a/InterfaceQT4/monPlusieursIntoPanel.py +++ b/InterfaceQT4/monPlusieursIntoPanel.py @@ -60,13 +60,14 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur): self.listeValeursCourantes=self.node.item.GetListeValeurs() SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) self.InitCommentaire() + self.connecterSignaux() def connecterSignaux(self) : - self.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.Ajout1Valeur ) + self.connect(self.listBoxVal, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.Ajout1Valeur ) + self.connect(self.LBValeurs,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.Sup1Valeur) self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed) self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) - self.connect(self.LBValeurs,SIGNAL("doubleClicked(QListBoxItem*)"),self.Sup1Valeur) self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur) self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur) @@ -85,22 +86,31 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur): QTPanel.ViewDoc(self) def Sup1Valeur(self): - index=self.LBValeurs.currentItem() - self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + indexCourant=self.LBValeurs.currentRow() + if indexCourant == None : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant))== 0 : return + if self.LBValeurs.item(indexCourant).text()==QString("") : return + self.LBValeurs.takeItem(indexCourant) listeVal=[] i=0 for valeur in self.listeValeursCourantes : - if i != index : listeVal.append(valeur) + if i != indexCourant : listeVal.append(valeur) i = i+1 self.listeValeursCourantes=listeVal SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) def Ajout1Valeur(self): liste=[] - if self.listBoxVal.currentText().latin1() == None : return - liste.append(self.listBoxVal.currentText().latin1()) - index=self.LBValeurs.currentItem() + 1 - if index==0 : index = -1 + + indexCourant=self.listBoxVal.currentRow() + if indexCourant == None : return + if self.listBoxVal.isItemSelected(self.listBoxVal.item(indexCourant))== 0 : return + if self.listBoxVal.item(indexCourant).text()==QString("") : return + liste.append(str(self.listBoxVal.item(indexCourant).text())) + if self.LBValeurs.currentItem() != None : + index= self.LBValeurs.currentRow()+ 1 + else : + index = 0 listeVal=[] for valeur in self.listeValeursCourantes : listeVal.append(valeur) @@ -112,7 +122,10 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur): l1=self.listeValeursCourantes[:index] l3=self.listeValeursCourantes[index:] for valeur in listeRetour: - self.LBValeurs.insertItem(QString(str(valeur)),index) + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) index=index+1 self.listeValeursCourantes=l1+listeRetour+l3 SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) diff --git a/InterfaceQT4/monSelectVal.py b/InterfaceQT4/monSelectVal.py index f4028851..11d1880f 100644 --- a/InterfaceQT4/monSelectVal.py +++ b/InterfaceQT4/monSelectVal.py @@ -28,17 +28,6 @@ from PyQt4.QtCore import * class DSelVal(Ui_DSelVal,QDialog): def __init__(self,parent ,modal ) : QDialog.__init__(self,parent) - if hasattr(parent,"leLayout"): - parent.leLayout.removeWidget(parent.leLayout.widgetActive) - parent.leLayout.widgetActive.close() - parent.leLayout.addWidget(self) - parent.leLayout.widgetActive=self - else: - parent.partieDroite=QWidget() - parent.leLayout=QGridLayout(parent.partieDroite) - parent.leLayout.addWidget(self) - parent.addWidget(parent.partieDroite) - parent.leLayout.widgetActive=self self.setupUi(self) class MonSelectVal(DSelVal): @@ -50,7 +39,6 @@ class MonSelectVal(DSelVal): def __init__(self,file,parent,name = None,fl = 0): self.FonctPanel=parent DSelVal.__init__(self,parent,0) - self.dictSepar={} self.separateur=" " self.texte=" " self.textTraite="" @@ -60,7 +48,9 @@ class MonSelectVal(DSelVal): self.connecterSignaux() def connecterSignaux(self) : - self.connect(self.BGSeparateur,SIGNAL("clicked(int)"),self.SeparateurSelect) + self.connect(self.Bespace,SIGNAL("clicked()"),self.SelectEsp) + self.connect(self.BpointVirgule,SIGNAL("clicked()"),self.SelectPoint) + self.connect(self.Bvirgule,SIGNAL("clicked()"),self.SelectVir) self.connect(self.BImportSel,SIGNAL("clicked()"),self.BImportSelPressed) self.connect(self.BImportTout,SIGNAL("clicked()"),self.BImportToutPressed) @@ -72,17 +62,21 @@ class MonSelectVal(DSelVal): def initVal(self): self.TBtext.clear() self.TBtext.setText(self.texte) - self.dictSepar["virgule"]="," - self.dictSepar["point-virgule"]=";" - self.dictSepar["espace"]=" " - def SeparateurSelect(self,numero): - monBouton=self.BGSeparateur.find(numero) - self.separateur=self.dictSepar[str(monBouton.text())] + def SelectEsp(self): + self.separateur=" " + + def SelectVir(self): + self.separateur="," + + def SelectPoint(self): + self.separateur=";" def BImportSelPressed(self): - text=str(self.TBtext.selectedText()) - self.textTraite=text + + texte = self.TBtext.textCursor().selectedText() + textTraite=texte.replace(u'\u2029',"\n") + self.textTraite=str(textTraite) self.Traitement() def BImportToutPressed(self): @@ -91,6 +85,7 @@ class MonSelectVal(DSelVal): def Traitement(self): import string + if self.textTraite == "" : return if self.textTraite[-1]=="\n" : self.textTraite=self.textTraite[0:-1] self.textTraite=string.replace(self.textTraite,"\n",self.separateur) liste1=self.textTraite.split(self.separateur) diff --git a/InterfaceQT4/monUniqueASSDPanel.py b/InterfaceQT4/monUniqueASSDPanel.py index 5c85b49d..42ef8ec2 100644 --- a/InterfaceQT4/monUniqueASSDPanel.py +++ b/InterfaceQT4/monUniqueASSDPanel.py @@ -66,6 +66,7 @@ class MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur): def connecterSignaux(self) : self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.listBoxASSD,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.ClicASSD) self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) diff --git a/InterfaceQT4/monUniqueBasePanel.py b/InterfaceQT4/monUniqueBasePanel.py index e7503d0e..2bbd02d3 100644 --- a/InterfaceQT4/monUniqueBasePanel.py +++ b/InterfaceQT4/monUniqueBasePanel.py @@ -79,7 +79,6 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur): def detruitBouton(self): mc = self.node.item.get_definition() type = mc.type[0] - #if not('grma' in repr(type)): if not('grma' in repr(type)) or not(self.editor.salome) : self.BSalome.close() self.BView2D.close() diff --git a/InterfaceQT4/monUniqueIntoPanel.py b/InterfaceQT4/monUniqueIntoPanel.py index e0b28432..ab49084c 100644 --- a/InterfaceQT4/monUniqueIntoPanel.py +++ b/InterfaceQT4/monUniqueIntoPanel.py @@ -61,13 +61,14 @@ class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur): self.connecterSignaux() def connecterSignaux(self) : - self.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicValeur ) + self.connect(self.listBoxVal, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicValeur ) self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) def ClicValeur(self): SaisieValeur.ClicValeur(self) + self.editor.init_modif() def BOkPressed(self): SaisieValeur.BOkPressed(self) diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index 49863cac..fdfa56ee 100644 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -38,10 +38,10 @@ class Appli(Ui_Eficas,QMainWindow): QMainWindow.__init__(self) Ui_Eficas.__init__(self) self.setupUi(self) + self.viewmanager = MyTabview(self) self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents')) self.connecterSignaux() - self.viewmanager = MyTabview(self) #self.monAssistant=QAssistantClient(QString(""), self.viewmanager) @@ -66,8 +66,6 @@ class Appli(Ui_Eficas,QMainWindow): def connecterSignaux(self) : self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu) - #self.connect(self.viewmanager,SIGNAL('lastEditorClosed'), self.handleLastEditorClosed) - #self.connect(self.viewmanager,SIGNAL('editorOpened'), self.handleEditorOpened) self.connect(self.action_Nouveau,SIGNAL("activated()"),self.fileNew) self.connect(self.actionNouvel_Include,SIGNAL("activated()"),self.NewInclude) @@ -95,7 +93,6 @@ class Appli(Ui_Eficas,QMainWindow): #self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex) #self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents) #self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout) - #self.connect(self.fileNewViewAction,SIGNAL("activated()"),self.fileNewView) #self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout) @@ -143,6 +140,35 @@ class Appli(Ui_Eficas,QMainWindow): try : f.close() except : pass + def addToRecentList(self, fn): + """ + Public slot to add a filename to the list of recently opened files. + + @param fn name of the file to be added + """ + self.recent.removeAll(fn) + self.recent.prepend(fn) + if len(self.recent) > 9: + self.recent = self.recent[:9] + + def sauveRecents(self) : + rep=self.CONFIGURATION.rep_user + monFichier=rep+"/listefichiers_"+self.code + try : + f=open(monFichier,'w') + if len(self.recent) == 0 : return + index=0 + while ( index < len(self.recent)): + ligne=str(self.recent[index])+"\n" + f.write(ligne) + index=index+1 + except : + pass + try : + f.close() + except : + pass + def traductionV7V8(self): @@ -209,9 +235,6 @@ class Appli(Ui_Eficas,QMainWindow): def fileOpen(self ): self.viewmanager.handleOpen() - def fileNewView(self): - self.viewmanager.handleNewView() - def fileSave(self): self.viewmanager.saveCurrentEditor() @@ -226,8 +249,7 @@ class Appli(Ui_Eficas,QMainWindow): def fileExit(self): # On peut sortir sur Abort - if self.viewmanager.handleCloseAll() ==0 : - return + self.viewmanager.handleCloseAll() if self.salome : self.close() else : @@ -251,12 +273,6 @@ class Appli(Ui_Eficas,QMainWindow): def visuJdcPy(self): self.viewmanager.handleViewJdcPy() - def get_source(self,file): - from editor import JDCEditor - monEditeur=JDCEditor() - texte=monEditeur.get_source(file) - return texte - def helpAbout(self): import AIDE AIDE.go3(parent=self) diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py index ad7cdcf1..53144721 100644 --- a/InterfaceQT4/qtSaisie.py +++ b/InterfaceQT4/qtSaisie.py @@ -65,26 +65,26 @@ class SaisieValeur: self.listBoxVal.setCurrentRow(1) def ClicASSD(self): - if self.listBoxASSD.selectedItem()== None : return - valeurQstring=self.listBoxASSD.selectedItem().text() + if self.listBoxASSD.currentItem()== None : return + valeurQstring=self.listBoxASSD.currentItem().text() commentaire = QString("Valeur selectionnée : ") commentaire.append(valeurQstring) self.Commentaire.setText(commentaire) - valeur=valeurQstring.latin1() + valeur=str(valeurQstring) validite,commentaire=self.politique.RecordValeur(valeur) self.Commentaire.setText(QString(commentaire)) self.editor.affiche_infos(commentaire) def ClicValeur(self): - if self.listBoxVal.selectedItem()== None : return - valeurQstring=self.listBoxVal.selectedItem().text() - valeur=valeurQstring.latin1() + if self.listBoxVal.currentItem()== None : return + valeurQstring=self.listBoxVal.currentItem().text() + valeur=str(valeurQstring) validite,commentaire=self.politique.RecordValeur(valeur) #self.Commentaire.setText(QString(commentaire)) self.editor.affiche_infos(commentaire) def BOkPressed(self): - if self.listBoxVal.selectedItem()==None : + if self.listBoxVal.currentItem()==None : commentaire = "Pas de valeur selectionnée" self.Commentaire.setText(QString(commentaire)) else : @@ -118,16 +118,19 @@ class SaisieValeur: valeurBrute=str(self.LEValeur.text()) else : valeurBrute=valeurTraitee - if valeurBrute == str("") : return 1, listeValeurs + if valeurBrute == str("") : return listeValeurs,1 + try : - valeur=eval(valeurBrute,{}) + valeur=eval(valeurBrute,{}) except : - valeur=valeurBrute + valeur=valeurBrute + if type(valeur) in (types.ListType,types.TupleType) : - indice = 0 - while (indice < len(valeur)): - v=valeur[indice] - if self.node.item.wait_complex() : + if self.node.item.wait_complex() : + indice = 0 + while (indice < len(valeur)): + v=valeur[indice] + if (v== 'RI' or v == 'MP'): try : t=tuple([v,valeur[indice+1],valeur[indice+2]]) @@ -140,13 +143,12 @@ class SaisieValeur: else : # ce n'est pas un tuple à la mode aster - listeValeurs.append(v) indice = indice + 1 - else: # on n'attend pas un complexe - listeValeurs.append(v) - indice=indice+1 + else: # on n'attend pas un complexe + listeValeurs=valeurBrute.split(',') + elif type(valeur) == types.StringType: listeValeurs=valeur.split(',') else: diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 86d3d3f7..005d2289 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -33,46 +33,71 @@ class MyTabview: self.editors = [] self.dict_editors={} self.untitledCount = 0 + self.doubles = {} self.gridLayout = QGridLayout(self.appliEficas.centralWidget()) self.myQtab = QTabWidget(self.appliEficas.centralWidget()) self.gridLayout.addWidget(self.myQtab) - #self.connect(tw, SIGNAL('currentChanged(QWidget*)'), self.handleCurrentChanged) def handleOpen(self,fichier=None,patron=0,units=None): - print "passage dans handleOpen" if fichier is None: fichier = QFileDialog.getOpenFileName(self.appliEficas, self.appliEficas.trUtf8('Ouvrir Fichier'), self.getOpenStartDir(), self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)')) if fichier.isNull(): return - from utilitaires import normabspath fichier = normabspath(unicode(fichier)) maPage=self.getEditor( fichier) - def handleClose(self): - print "passage dans Close" + def handleClose(self,doitSauverRecent = 1): + print "passage dans handleClose" + print self.dict_editors + if doitSauverRecent : self.appliEficas.sauveRecents() + index=self.myQtab.currentIndex() + if index < 0 : return + self.checkDirty(self.dict_editors[index]) + index=self.myQtab.currentIndex() + while index < len(self.dict_editors) -1 : + self.dict_editors[index]=self.dict_editors[index+1] + index = index + 1 + del self.dict_editors[len (self.dict_editors) -1] + try : + del self.doubles[self.dict_editors[index]] + except : + pass + print self.dict_editors + self.myQtab.removeTab(index) + def handleCloseAll(self): - print "passage dans CloseAll" - - def handleNewView(self): - print "passage dans handleNew" - + self.appliEficas.sauveRecents() + #print "passage dans CloseAll" + while len(self.dict_editors) > 0 : + self.myQtab.setCurrentIndex(0) + self.handleClose(0) + def handleEditCopy(self): print "passage dans handleEditCopy" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditCopy() def handleEditCut(self): print "passage dans handleEditCut" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditCut() def handleEditPaste(self): print "passage dans handleEditPaste" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditPaste() def newEditor(self,include=0): - print "passage dans newEditor" + #print "passage dans newEditor" maPage=self.getEditor() def newIncludeEditor(self): @@ -94,10 +119,32 @@ class MyTabview: self.dict_editors[index].viewJdcPy() def saveCurrentEditor(self): - print "passage dans CurrentEditor" + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dict_editors[index] + if editor in self.doubles.keys() : + QMessageBox.warning( + None, + self.appliEficas.trUtf8("Fichier Duplique"), + self.appliEficas.trUtf8("Le fichier ne sera pas sauvegarde."), + self.appliEficas.trUtf8("&Annuler")) + return + ok, newName = editor.saveFile() + if ok : + fileName=os.path.basename(unicode(newName)) + self.myQtab.setTabText(index,fileName) def saveAsCurrentEditor(self): - print "passage dans AsCurrentEditor" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + oldName=editor.fichier + ok,newName = editor.saveFileAs() + if ok : + fileName=os.path.basename(unicode(newName)) + self.myQtab.setTabText(index,fileName) + if editor in self.doubles.keys(): + if oldName != newName : + del self.doubles[editor] def getEditor(self,fichier = None,jdc = None, units = None): @@ -115,26 +162,18 @@ class MyTabview: self.appliEficas.trUtf8("&Duplication"), self.appliEficas.trUtf8("&Abort")) if abort: break + double=editor else : from editor import JDCEditor editor = JDCEditor(fichier, jdc, self.myQtab,units=units,appli=self.appliEficas) + if double != None : + self.doubles[editor]=double if editor.jdc: # le fichier est bien un jdc self.editors.append(editor) - #self.connect(editor, SIGNAL('modificationStatusChanged'), self.handleModificationStatusChanged) - #self.connect(editor, SIGNAL('cursorChanged'), self.handleCursorChanged) - #self.connect(editor, SIGNAL('editorSaved'), self.handleEditorSaved) - #self.connect(editor, SIGNAL('breakpointToggled'), self.handleBreakpointToggled) - #self.connect(editor, SIGNAL('bookmarkToggled'), self.handleBookmarkToggled) - #self.connect(editor, SIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled) - #self.handleEditorOpened() - #self.emit(SIGNAL('editorOpened'), (fichier,)) newWin = 1 else: editor.closeIt() - #hauteur=self.appliEficas.centralWidget().height() - #argeur=self.appliEficas.centralWidget().width() - #self.myQtab.setGeometry(0,0,hauteur,largeur) if newWin: self.addView(editor, fichier) elif editor.jdc: @@ -165,3 +204,45 @@ class MyTabview: return userDir except : return "" + + + def checkDirty(self, editor): + """ + Private method to check dirty status and open a message window. + + @param editor editor window to check + @return flag indicating successful reset of the dirty flag (boolean) + """ + + print "checkDirty" + if (editor.modified) and (editor in self.doubles.keys()) : + res = QMessageBox.warning( + None, + self.appliEficas.trUtf8("Fichier Duplique"), + self.appliEficas.trUtf8("Le fichier ne sera pas sauvegarde."), + self.appliEficas.trUtf8("&Quitter"), + self.appliEficas.trUtf8("&Annuler")) + if res == 0 : return 1 + return 0 + if editor.modified: + fn = editor.getFileName() + if fn is None: + fn = self.appliEficas.trUtf8('Noname') + res = QMessageBox.warning(self.appliEficas, + self.appliEficas.trUtf8("Fichier Modifie"), + self.appliEficas.trUtf8("Le fichier %1 n a pas ete sauvegarde.") + .arg(fn), + self.appliEficas.trUtf8("&Sauvegarder"), + self.appliEficas.trUtf8("&Quitter "), + self.appliEficas.trUtf8("&Annuler"), 0, 2) + if res == 0: + (ok, newName) = editor.saveFile() + if ok: + fileName=os.path.basename(unicode(newName)) + index=self.myQtab.currentIndex() + self.myQtab.setTabText(index,fileName) + return ok + elif res == 2: + return 0 + return 1 +