--- /dev/null
+# -*- coding: utf-8 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+class CatalogDescription:
+
+ def __init__(self, identifier, cata_file_path, file_format = "python",
+ default = False, code = None, user_name = None,
+ selectable = True):
+ """
+ This class can be used to describe an Eficas catalog.
+
+ :type identifier: string
+ :param identifier: unique identifier for the catalog
+
+ :type cata_file_path: string
+ :param cata_file_path: path of the file containing the catalog itself
+
+ :type file_format: string
+ :param file_format: format of the files generated when using this
+ catalog
+
+ :type default: boolean
+ :param default: indicate if this catalog is the default one (appear on
+ the top of the catalogs list)
+
+ :type code: string
+ :param code: Deprecated. Used to indicate the code associated to this
+ catalog
+
+ :type user_name: string
+ :param user_name: name of the catalog as it will appear in the list
+
+ :type selectable: boolean
+ :param selectable: indicate if this catalog appears in the list.
+ Setting this parameter to False is useful to keep
+ old catalogs to edit existing files but to forbid
+ to use them to create new files.
+
+ """
+ self.identifier = identifier
+ self.cata_file_path = cata_file_path
+ self.file_format = file_format
+ self.default = default
+ self.code = code
+ if user_name is None:
+ self.user_name = identifier
+ else:
+ self.user_name = user_name
+ self.selectable = selectable
+
+ @staticmethod
+ def create_from_tuple(cata_tuple):
+ print "Warning: Describing a catalog with a tuple is deprecated. " \
+ "Please create a CatalogDescription instance directly."
+ desc = CatalogDescription(code = cata_tuple[0],
+ identifier = cata_tuple[1],
+ cata_file_path = cata_tuple[2],
+ file_format = cata_tuple[3])
+ if len(cata_tuple) == 5 and cata_tuple[4] == "defaut":
+ desc.default = True
+ return desc
class MonChoixCata(Ui_DChoixCata,QtGui.QDialog):
"""
- 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
+ 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,listeCata,readercata, QWparent , name = None,fl = 0):
- QtGui.QDialog.__init__(self,QWparent)
+ def __init__(self, QWparent, listeCata, title = None):
+ QtGui.QDialog.__init__(self, QWparent)
self.setModal(True)
self.setupUi(self)
- self.listeCata=listeCata
- self.readercata=readercata
- for cata in self.listeCata :
- self.CBChoixCata.insertItem(100,cata)
- lab = QString(repr(len(listeCata)))
- lab += QString(" versions du catalogue sont disponibles")
- self.TLNb.setText(lab)
- self.CBChoixCata.setCurrentIndex(0)
- self.readercata.version_cata=self.CBChoixCata.currentText()
+ self.CBChoixCata.addItems(listeCata)
+ self.TLNb.setText(QString("%d versions du catalogue sont disponibles" %
+ len(listeCata)))
+ if title is not None:
+ self.setWindowTitle(QString.fromUtf8(title))
def on_buttonCancel_clicked(self):
QDialog.reject(self)
- def on_CBChoixCata_activated(self):
- self.readercata.version_cata=self.CBChoixCata.currentText()
-
def on_buttonOk_clicked(self):
QDialog.accept(self)
import traceback
import cPickle
import re
+import types
# Modules Eficas
from Noyau.N_CR import CR
+from Editeur.catadesc import CatalogDescription
from Editeur.utils import init_rep_cata_dev
import analyse_catalogue
liste_cata_possibles=[]
self.Commandes_Ordre_Catalogue=[]
+
+ all_cata_list = []
for catalogue in self.appliEficas.CONFIGURATION.catalogues:
- if catalogue[0] == self.code :
- if (self.ssCode == None) or (self.ssCode == catalogue[3]):
+ if isinstance(catalogue, CatalogDescription):
+ all_cata_list.append(catalogue)
+ elif isinstance(catalogue, types.TupleType):
+ all_cata_list.append(CatalogDescription.create_from_tuple(catalogue))
+ else:
+ print "Catalog description cannot be interpreted: ", catalogue
+
+ # TODO: Remove this filter. Normally, CONFIGURATION should only define the catalogs for this code anyway.
+ for catalogue in all_cata_list:
+ if catalogue.code == self.code :
+ if (self.ssCode == None) or (self.ssCode == catalogue.file_format):
liste_cata_possibles.append(catalogue)
if len(liste_cata_possibles)==0:
self.appliEficas.close()
if self.appliEficas.salome == 0 :
sys.exit(1)
+ return
if self.version_code is not None:
# La version a ete fixee
for cata in liste_cata_possibles:
- if self.version_code == cata[1]:
- self.fic_cata = cata[2]
- self.appliEficas.format_fichier=cata[3]
- elif len(liste_cata_possibles)==1:
- self.fic_cata = liste_cata_possibles[0][2]
- self.version_code = liste_cata_possibles[0][1]
- self.appliEficas.format_fichier=liste_cata_possibles[0][3]
- lab=QString("Eficas ")
- lab+=QString(self.VERSION_EFICAS)
- lab+=QString(" pour ")
- lab+=QString(self.code)
- lab+=QString(" avec le catalogue ")
- lab+=self.version_code
- try :
- # souci pour les includes et sans Ihm
- self.appliEficas.setWindowTitle(lab)
- except :
- pass
+ if self.version_code == cata.identifier:
+ self.fic_cata = cata.cata_file_path
+ self.appliEficas.format_fichier = cata.file_format
else:
- # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
- # lequel il veut utiliser ...
- self.ask_choix_catalogue()
- # On est dans Salome et il faut sortir proprement
+ cata_choice_list = []
+ for cata in liste_cata_possibles:
+ if cata.selectable:
+ if cata.default:
+ cata_choice_list.insert(0, cata)
+ else :
+ cata_choice_list.append(cata)
+ if len(cata_choice_list) == 0:
+ QMessageBox.critical(self.QWParent, "Import du catalogue",
+ QString.fromUtf8("Aucun catalogue trouvé"))
+ self.appliEficas.close()
+ if self.appliEficas.salome == 0 :
+ sys.exit(1)
+ elif len(cata_choice_list) == 1:
+ self.fic_cata = cata_choice_list[0].cata_file_path
+ self.version_code = cata_choice_list[0].identifier
+ self.appliEficas.format_fichier = cata_choice_list[0].file_format
+ lab=QString("Eficas ")
+ lab+=QString(self.VERSION_EFICAS)
+ lab+=QString(" pour ")
+ lab+=QString(self.code)
+ lab+=QString(" avec le catalogue ")
+ lab+=self.version_code
+ try :
+ # souci pour les includes et sans Ihm
+ self.appliEficas.setWindowTitle(lab)
+ except :
+ pass
+ else:
+ # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
+ # lequel il veut utiliser ...
+ self.ask_choix_catalogue(cata_choice_list)
+ # On est dans Salome et il faut sortir proprement
if self.fic_cata == None :
if self.appliEficas.salome == 0 :
rep_cata = os.path.dirname(self.fic_cata)
self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyse_catalogue(self.fic_cata)
- def ask_choix_catalogue(self):
+ def ask_choix_catalogue(self, cata_choice_list):
"""
- Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs
+ Ouvre une fenetre de sélection du catalogue dans le cas où plusieurs
ont été définis dans Accas/editeur.ini
"""
- # construction du dictionnaire et de la liste des catalogues
- self.dico_catalogues = {}
- liste_choix=[]
- for catalogue in self.appliEficas.CONFIGURATION.catalogues:
- if catalogue[0] == self.code :
- self.dico_catalogues[catalogue[1]] = catalogue
- if len(catalogue) == 5 :
- if catalogue[4]=='defaut' :
- liste_choix.insert(0,catalogue[1])
- else :
- liste_choix.append(catalogue[1])
-
-
- lab=QString(self.VERSION_EFICAS)
- lab+=QString(" pour ")
- lab+=QString(self.code)
- lab+=QString(" avec le catalogue ")
-
- # teste si plusieurs catalogues ou non
- if len(liste_choix) == 0:
- QMessageBox.critical( self.QWParent, "", QString.fromUtf8("Aucun catalogue déclaré pour %s" %self.code))
- self.appliEficas.close()
- if self.appliEficas.salome == 0 :
- sys.exit(1)
-
- # création d'une boite de dialogue modale
- widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True )
+ title = getattr(self.appliEficas.CONFIGURATION, "cata_choice_window_title", None)
+ widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title)
ret=widgetChoix.exec_()
lab=QString(self.VERSION_EFICAS)
lab+=QString(self.code)
lab+=QString(" avec le catalogue ")
if ret == QDialog.Accepted:
- self.version_cata=str(self.version_cata)
- self.fic_cata = self.dico_catalogues[self.version_cata][2]
+ cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()]
+ self.version_cata = cata.identifier
+ self.fic_cata = cata.cata_file_path
self.version_code = self.version_cata
- self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3]
+ self.appliEficas.format_fichier = cata.file_format
lab+=self.version_cata
self.appliEficas.setWindowTitle(lab)
#qApp.mainWidget().setCaption(lab)
- else :
- self.appliEficas.close()
+ else:
+ self.appliEficas.close()
if self.appliEficas.salome == 0 :
sys.exit(0)
-
def traite_clefs_documentaires(self):
try:
self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'