self.item = jdc_item
self.tree = self
- self.QWParent = QWParent
self.editor = QWParent
self.appliEficas = self.editor.appliEficas
def contextMenuEvent(self,event) :
- print "contextMenuEvent"
coord=event.globalPos()
item= self.currentItem()
self.handleContextMenu(item,coord)
@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()
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
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():
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
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')
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':
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):
brothers=self.treeParent.children
if brothers:
toselect=brothers[index]
- self.treeParent.setSelected(0)
else:
toselect=self.treeParent
toselect.select()
#
# #------------------------------------------------------------------
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)
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 """
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 *
"""
"""
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):
"""
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
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
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
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 )
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 :
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")
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):
#--------------------------------#
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):
#-----------------------#
@param fn filename to read from (string or QString)
"""
fn = unicode(fn)
-# qApp.setOverrideCursor(Qt.WaitCursor)
# ------------------------------------------------------------------------------------
# charge le JDC
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)
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 <b>%1</b> could not be saved.<br>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 <b>%1</b> could not be saved.<br>Reason: %2')
+ .arg(unicode(fn)).arg(str(why)))
+ return 0
+
# #------------------------------------
# def writeFilesOpenturns(self,fn) :
# #------------------------------------
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 <b>%1</b> 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 <b>%1</b> 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 :
# 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
# 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)
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)
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 :
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
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 :
i = i+1
self.listeValeursCourantes=listeVal
listeValeurs=self.listeValeursCourantes
- self.LBValeurs.clear()
- for valeur in self.DecoupeListeValeurs(listeValeurs):
- self.LBValeurs.insertItem(str(valeur))
# 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("<font size=\"+1\">La commande INCLUDE requiert un nom de Fichier :</font>"))
- 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("<font size=\"+1\">La commande INCLUDE requiert un nom de Fichier :</font>"))
+ #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()
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)
+
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):
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
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)
from PyQt4 import *
from PyQt4.QtGui import *
+from PyQt4.QtCore import *
from monPlusieursIntoPanel import MonPlusieursIntoPanel
from monPlusieursIntoPanel import DPlusInto
from qtCommun import QTPanel
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()
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()
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 :
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()
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()
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
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 :
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)
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)
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)
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)
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)
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):
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=""
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)
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):
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)
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)
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()
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)
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)
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)
#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)
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):
def fileOpen(self ):
self.viewmanager.handleOpen()
- def fileNewView(self):
- self.viewmanager.handleNewView()
-
def fileSave(self):
self.viewmanager.saveCurrentEditor()
def fileExit(self):
# On peut sortir sur Abort
- if self.viewmanager.handleCloseAll() ==0 :
- return
+ self.viewmanager.handleCloseAll()
if self.salome :
self.close()
else :
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)
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 :
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]])
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:
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):
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):
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:
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 <b>%1</b> 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
+